我在一个类中使用此Array.sort方法从最高到最低列出我的对象:
public static void sortFilm(Film[] array) {
Arrays.sort(array, new Comparator<Film>() {
@Override
public int compare(Film f1, Film f2) {
return Double.compare(f1.getFinalScore(), f2.getFinalScore());
}
});
printArr(array);
}
我打算在我的侦听器类的actionPerformed中使用它,但我不知道如何创建必要的参数(Film [])来使用Array.sort方法。我的目的是在按下特定按钮后显示从最高到最低的所有对象的列表。
提前致谢!
编辑:
这就是我认为它的样子:
@Override
public void actionPerformed(ActionEvent e) {
this.cm.sortFilm(?);
}
问号是缺失的参数。
答案 0 :(得分:2)
由于您需要将Film对象排序在一起,您需要一个compareTo函数来将每个2个影片进行比较,您可以通过实现SELECT
COUNT(p.id) AS tweet_count,
p.author AS author,
p.profile_image_url AS profile_image_url,
p.screen_name AS screen_name,
concat_ws('/', MIN(p.postday), MIN(p.postmonth), MIN(p.postyear) ) AS creation_date,
p.message AS MESSAGE,
af.followerid AS follower
FROM
post p
INNER JOIN
author_follower af
ON
af.id LIKE IF(p.author = NULL, '', concat(p.author, '%'))
WHERE
p.hashtaglist LIKE 'hashtagtobeused'
GROUP BY
author,
profile_image_url,
screen_name,
MESSAGE,
follower
ORDER BY
CAST(MIN(postyear) AS INT),
CAST(MIN(postmonth) AS INT),
CAST(MIN(postday) AS INT),
CAST(MIN(posthour) AS INT) ASC;
然后在Film Class
中实现Comparable<Film>
方法在compareTo
中执行此操作上课。
之后,将您的电影放在任何collection
ArrayList
而不是数组中,然后只需拨打Collections.sort(films)
即可按照递增或递减顺序获取电影列表。
这是一个用于演示的电影课程:
public class Film implements Comparable<Film>{
int finalScore ;
public Film(int finalScore){
this.finalScore = finalScore;
}
public int getFinalScore(){
return this.finalScore;
}
@Override
public int compareTo(Film film2) {
return Double.compare(this.finalScore, film2.finalScore);
}
}
这是主要的:
public static void main(String[] args) {
ArrayList<Film> films = new ArrayList<>();
films.add(new Film(100));
films.add(new Film(400));
films.add(new Film(200));
films.add(new Film(300));
/*reverse order is the reversed order of your compareTo method
, as you need Decreasing manner and the compareTo method
outputs the Increasing manner then you need to reverse it,
remove this comparator if you need it increasing.*/
Collections.sort(films,Comparator.reverseOrder());
for (Film film : films) {
System.out.print(film.finalScore+" "); // prints 400 300 200 100
}
}
所以你的actionPerformed就像这样
@Override
public void actionPerformed(ActionEvent e) {
Collections.sort(films,Comparator.reverseOrder());
//now films are sorted! use films objects to do anything you need
}