如何将此Array.sort方法实现到我的actionPerformed中?

时间:2016-06-24 01:47:39

标签: java arrays swing sorting actionlistener

我在一个类中使用此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(?);
}

问号是缺失的参数。

1 个答案:

答案 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

}