Ho una raccolta di oggetti Duck e mi piacerebbe ordinare ordinandoli con più chiavi.Ordinamento di oggetti Java utilizzando più chiavi
class Duck {
DuckAge age; //implements Comparable
DuckWeight weight; //implements Comparable
String name;
}
List<Duck> ducks = Pond.getDucks();
es. Voglio ordinarli principalmente dai loro pesi e secondariamente dalla loro età. Se due anatre hanno esattamente lo stesso peso e la stessa identica età, allora le differenziamo usando i loro nomi come chiave terziaria. Potrei fare qualcosa di simile:
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);
}
});
Beh io faccio abbastanza frequentemente, ma questa soluzione non ha odore giusto. Non si adatta bene ed è facile rovinarlo. Sicuramente ci deve essere un modo migliore di ordinare anatre usando più chiavi! Qualcuno sa di una soluzione migliore?
EDIT rimosso inutili else
rami
non sembra troppo male, è possibile rimuovere un livello di indentazione, rimuovendo entrambi 'else' poiché in' if' si ritorna, quindi non è necessario. – stivlo
+1 per ottenere le anatre in ordine – Rich
Non esiste una soluzione elegante nello stesso core Java? – Sid