Сортировка объектов Java с использованием нескольких ключей

У меня есть коллекция объектов 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 ветки

50
задан Rich 7 November 2011 в 20:31
поделиться