Duck オブジェクトのコレクションがあり、複数のキーを使用して並べ替えたいと考えています。
class Duck {
DuckAge age; //implements Comparable
DuckWeight weight; //implements Comparable
String name;
}
List<Duck> ducks = Pond.getDucks();
例えば。主に体重で並べ替え、次に年齢で並べ替えたいと思います。2 羽のアヒルの体重と年齢がまったく同じ場合は、名前を 3 次キーとして区別してみましょう。私はこのようなことをするかもしれません:
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
枝を削除しました