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.