简体   繁体   中英

How can I sort a Java list using two different values?

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

This code sorts two lists based on the value of the object called points. After I sort it based on the value point I want to sort it again based on the value goalScored . So, if the points of two teams are equal, I want to sort it again based on the goalScored value.

How can I do that?

Java 8's enhancements to the Comparator interface give you a pretty elegant way of achieving this:

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

Just add another condition to your comparator:

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

            return o2.goalsScored() - o1.goalsScored();
        } else {
            return o2.getPoints() - o1.getPoints();
        }
    }

First it gets the o1 and o2's points and compare them. If they are equal, the if statement proceed to calculate which o has more goals scored and returns the result, else if the points are NOT equal it returns the result.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM