Reputation: 8297
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?
Upvotes: 2
Views: 93
Reputation: 61
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.
Upvotes: 1
Reputation: 311103
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));
Upvotes: 9
Reputation: 9597
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;
}
Upvotes: 2