假设您有一个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
更加灵活,因为不同的实现可以按名称,年龄等进行排序。也可以看看
Comparable
and Comparator
? 为了完整起见,我应注意,由于可能发生溢出,必须非常谨慎地使用
return o1.f - o2.f
减法比较快捷方式(请阅读:有效的Java 2nd Edition:项目12:考虑实现Comparable
)。大概曲棍球不是一项运动,运动员可以进球的数量会引起问题=)也可以看看