如何在我的 actionPerformed 中实现此 Array.sort 方法?
How can I implement this Array.sort method into my actionPerformed?
我在一个 class 中有这个 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 中使用它 class,但我不知道如何创建必要的参数 (Film[]) 来使用 Array.sort 方法。我的意图是在按下特定按钮后从最高到最低显示所有对象的列表。
提前致谢!
编辑:
这就是我认为的样子:
@Override
public void actionPerformed(ActionEvent e) {
this.cm.sortFilm(?);
}
问号是缺少的参数。
由于您需要将 Film 对象排序在一起,因此您需要一个 compareTo 函数来将每 2 个 Films 放在一起进行比较,您可以在 Film Class
中通过实施 Comparable<Film>
然后实施 compareTo
来实现class.
中的方法
之后,将您的电影保存在任何 collection
中作为 ArrayList
而不是数组,然后只需调用 Collections.sort(films)
即可让您的电影列表按升序或降序排列。
这里是演示的电影class:
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
}
我在一个 class 中有这个 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 中使用它 class,但我不知道如何创建必要的参数 (Film[]) 来使用 Array.sort 方法。我的意图是在按下特定按钮后从最高到最低显示所有对象的列表。
提前致谢!
编辑:
这就是我认为的样子:
@Override
public void actionPerformed(ActionEvent e) {
this.cm.sortFilm(?);
}
问号是缺少的参数。
由于您需要将 Film 对象排序在一起,因此您需要一个 compareTo 函数来将每 2 个 Films 放在一起进行比较,您可以在 Film Class
中通过实施 Comparable<Film>
然后实施 compareTo
来实现class.
之后,将您的电影保存在任何 collection
中作为 ArrayList
而不是数组,然后只需调用 Collections.sort(films)
即可让您的电影列表按升序或降序排列。
这里是演示的电影class:
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
}