我有一个Duck对象的集合,我想使用多个键对它们进行排序。使用多个键排序Java对象
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);
}
});
嗯,我这样做的频率很高,但这种解决方案并没有正确的气味。它不能很好地扩展,很容易搞砸。当然,必须有更好的方法来使用多个键对鸭子进行分类!有人知道更好的解决方案吗?
编辑去除不必要的else
分支
它看起来不错,你可以删除一个级别的缩进,通过删除'else',因为在你返回的'if'中,所以这是不需要的。 – stivlo
+1让你的鸭子顺序 – Rich
核心Java本身没有优雅的解决方案吗? – Sid