假设您有一个Arraylist对象的HockeyPlayer

如果它们都有一个可变的 int GoalsScored ,那么如何排序呢?您如何按GoalScored排序?

最佳答案

您可以将 Collections.sort 与自定义 Comparator<HockeyPlayer> 结合使用。

    class HockeyPlayer {
        public final int goalsScored;
        // ...
    };

    List<HockeyPlayer> players = // ...

    Collections.sort(players, new Comparator<HockeyPlayer>() {
        @Override public int compare(HockeyPlayer p1, HockeyPlayer p2) {
            return p1.goalsScored - p2.goalsScored; // Ascending
        }

    });

比较部分也可以这样写:
players.sort(Comparator.comparingInt(HockeyPLayer::goalsScored));

或者,您可以将HockeyPlayer implements设为 Comparable<HockeyPlayer> 。这定义了所有HockeyPlayer对象的自然顺序。使用Comparator更加灵活,因为不同的实现可以按名称,年龄等进行排序。

也可以看看
  • Java: What is the difference between implementing Comparable and Comparator ?


  • 为了完整起见,我应注意,由于可能发生溢出,必须非常谨慎地使用return o1.f - o2.f减法比较快捷方式(请阅读:有效的Java 2nd Edition:项目12:考虑实现Comparable)。大概曲棍球不是一项运动,运动员可以进球的数量会引起问题=)

    也可以看看
  • Java Integer: what is faster comparison or subtraction?
  • 08-16 07:30