Tengo una colección de objetos Duck y me gustaría ordenarlos usando múltiples claves.Ordenando objetos Java usando múltiples claves
class Duck {
DuckAge age; //implements Comparable
DuckWeight weight; //implements Comparable
String name;
}
List<Duck> ducks = Pond.getDucks();
por ejemplo. Quiero ordenarlos principalmente por sus pesos y secundarios por su edad. Si dos patos tienen exactamente el mismo peso y la misma edad exacta, entonces diferenciémoslos usando sus nombres como clave terciaria. Podría hacer algo como esto:
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);
}
});
Bueno, hago esto con bastante frecuencia, pero esta solución no huele bien. No escala bien, y es fácil equivocarse. ¡Seguramente debe haber una forma mejor de clasificar patos usando múltiples llaves! ¿Alguien sabe de una mejor solución?
EDITAR retira innecesaria else
ramas
no se ve tan mal, puede eliminar un nivel de sangría, eliminando ambos 'else' ya que en el' si' devuelve, por lo que no es necesario. – stivlo
+1 para obtener sus patos en orden – Rich
¿No hay una solución elegante en el núcleo de Java en sí? – Sid