私はDuckオブジェクトのコレクションを持っています。複数のキーを使って並べ替えたいと思います。複数のキーを使用してJavaオブジェクトを並べ替える
class Duck {
DuckAge age; //implements Comparable
DuckWeight weight; //implements Comparable
String name;
}
List<Duck> ducks = Pond.getDucks();
例: は主にウエイトが、が副次的にでソートしたいと思っています。もし2頭のアヒルの体重が全く同じで年齢が同じであれば、という名前のを使って区別しましょう。私はこのような何かをするかもしれません:
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はあなたがApache Commons LangからCompareToBuilderを使用することができ、不要なelse
枝
それはあまりにも悪くはありません。インデントのレベルを削除するには、 'else'の両方を削除します。 – stivlo
+1あなたのカモを注文するには – Rich
コアJava自体に優雅なソリューションはありませんか? – Sid