У меня есть коллекция объектов Duck, и я бы хотел сортировать их с помощью нескольких клавиш.
class Duck {
DuckAge age; //implements Comparable
DuckWeight weight; //implements Comparable
String name;
}
List<Duck> ducks = Pond.getDucks();
например. Я хочу отсортировать их в первую очередь по их весам и во второй раз по возрасту. Если две утки имеют одинаковый вес и точный возраст, то пусть они дифференцируют их, используя их имена в качестве третичного ключа. Я мог бы сделать что-то вроде этого:
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);
}
});
Хорошо, я делаю это довольно часто, но это решение не пахнет правильно. Он плохо масштабируется, и его легко испортить. Разумеется, должен быть лучший способ сортировки уток с помощью нескольких ключей! Кто-нибудь знает о лучшем решении?
EDIT удалены ненужные ветки else