如何使用两个不同的值对Java列表进行排序?

时间:2017-12-04 14:33:53

标签: java sorting

public void sortLeagueTable(List<LeagueTableItem> table) {
    Collections.sort(table, new Comparator<LeagueTableItem>(){
        public int compare(LeagueTableItem o1, LeagueTableItem o2){
            return o2.getPoints() - o1.getPoints();
        }
    });
}

此代码根据名为points的对象的值对两个列表进行排序。在我根据值point对其进行排序后,我想根据值goalScored再次对其进行排序。因此,如果两个团队的积分相等,我想根据goalScored值再次对其进行排序。

我该怎么做?

3 个答案:

答案 0 :(得分:9)

Java 8对Comparator界面的增强功能为您提供了一种非常优雅的方式来实现这一目标:

table.sort(Comparator.comparingInt(LeagueTableItem::getPoints)
                     .thenComparingInt(LeagueTableItem::goalScored));

答案 1 :(得分:2)

只需在比较器中添加另一个条件:

public int compare(LeagueTableItem o1, LeagueTableItem o2){
     int diff = o2.getPoints() - o1.getPoints();
     if (diff == 0) {
        diff = o2.goalScored() - o1.goalScored();
     }
     return diff;
}

答案 2 :(得分:1)

if (!pointer)

首先获得o1和o2的积分并进行比较。如果它们相等,则if语句继续计算哪个 o 有更多的目标得分并返回结果,否则如果点不相等则返回结果。