【问题标题】:How can I implement this Array.sort method into my actionPerformed?如何在我的 actionPerformed 中实现这个 Array.sort 方法?
【发布时间】:2016-06-24 01:47:39
【问题描述】:

我在一个类中有这个 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(?);
}

问号是缺少的参数。

【问题讨论】:

  • 我不确定我们能提供什么帮助,因为我们将如何根据您发布的少量代码猜测如何创建一个 Film 数组。考虑创建一个有效的minimal reproducible example,在此处发布代码,从而帮助我们更好地了解您的问题。此外,您最好在此处使用ArrayList&lt;Film&gt;,而不是使用 Film 数组。
  • 很抱歉给您带来不便,我是新手。另一张海报虽然帮了很多忙。不过,感谢您的处置!
  • 请注意,如果您在发帖前至少尝试解决您的问题,您将学到更多。即使你没有成功,你也可以提出一个更好的问题,一个向我们展示你的尝试的问题,并以这种方式向我们展示你究竟困惑了什么。否则,您实际上是在要求某人为您编写代码,这并不好。

标签: java arrays swing sorting actionlistener


【解决方案1】:

由于您需要将 Film 对象排序在一起,因此您需要一个 compareTo 函数来比较每两个 Films,您可以在 Film Class 中通过实现 Comparable&lt;Film&gt; 然后在类中实现 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

}

【讨论】:

  • 你好!这越来越尴尬,原来我在其他帖子中不够清楚。我想我现在可以弄清楚并且可以在我的代码中实现它。非常感谢!再次!
  • 没问题 :) 我很乐意随时为您提供帮助:)
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多