Ich habe eine Sammlung von Duck-Objekten und würde gerne sie nach mehreren Schlüsseln sortieren .
class Duck {
DuckAge age; //implements Comparable
DuckWeight weight; //implements Comparable
String name;
}
List<Duck> ducks = Pond.getDucks();
z.B.. Ich möchte sie sortieren in erster Linie durch ihre Gewichte y in zweiter Linie durch ihr Alter . Wenn zwei Enten genau dasselbe Gewicht und genau dasselbe Alter haben, dann unterscheiden wir sie anhand ihrer Namen als Tertiärschlüssel . Ich könnte etwas in dieser Art machen:
Collections.sort(ducks, new Comparator<Duck>(){
@Override
public int compare(Duck d1, Duck d2){
int weightCmp = d1.weight.compareTo(d2.weight);
if (weightCmp != 0) {
return weightCmp;
}
int ageCmp = d1.age.compareTo(d2.age);
if (ageCmp != 0) {
return ageCmp;
}
return d1.name.compareTo(d2.name);
}
});
Ich mache das recht häufig, aber diese Lösung riecht nicht gut. Sie lässt sich nicht gut skalieren, und man kann es leicht vermasseln. Es muss doch einen besseren Weg geben, die Ducks mit mehreren Tasten zu sortieren! Kennt jemand eine bessere Lösung?
EDITAR Unnötiges entfernt else
Zweige