在Java中实现按propertyX、按propertyY、按propertyZ排序
在以下类别中给出一个示例:在Java中实现按propertyX、按propertyY、按propertyZ排序,java,sorting,collections,Java,Sorting,Collections,在以下类别中给出一个示例: class Boo { private final String propertyX; private final Double propertyY; private final Integer propertyZ; } 当对集合调用Collection.sort(…)时,如何构造一个比较器,该比较器将导致类的实例依次按propertyX、propertyY和propertyZ排序 比较器是一种方法吗?你可以按照你的建议去做 Comparat
class Boo {
private final String propertyX;
private final Double propertyY;
private final Integer propertyZ;
}
当对集合调用Collection.sort(…)
时,如何构造一个比较器
,该比较器将导致类的实例依次按propertyX、propertyY和propertyZ排序
比较器是一种方法吗?你可以按照你的建议去做
Comparator<Boo> booCmp = new Comparator<Boo>() {
@Override
public int compare(Boo o1, Boo o2) {
int cmp = o1.propertyX.compareTo(o2.propertyX);
if (cmp == 0)
cmp = o1.propertyY.compareTo(o2.propertyY);
if (cmp == 0)
cmp = o1.propertyZ.compareTo(o2.propertyZ);
return cmp;
}
};
比较器booCmp=新比较器(){
@凌驾
公共整数比较(Boo o1,Boo o2){
int cmp=o1.性质x.比较(o2.性质x);
如果(cmp==0)
cmp=o1.性质yy.与(o2.性质yy)相比;
如果(cmp==0)
cmp=o1.性能比(o2.性能比);
返回cmp;
}
};
你可以按照你的建议去做
Comparator<Boo> booCmp = new Comparator<Boo>() {
@Override
public int compare(Boo o1, Boo o2) {
int cmp = o1.propertyX.compareTo(o2.propertyX);
if (cmp == 0)
cmp = o1.propertyY.compareTo(o2.propertyY);
if (cmp == 0)
cmp = o1.propertyZ.compareTo(o2.propertyZ);
return cmp;
}
};
比较器booCmp=新比较器(){
@凌驾
公共整数比较(Boo o1,Boo o2){
int cmp=o1.性质x.比较(o2.性质x);
如果(cmp==0)
cmp=o1.性质yy.与(o2.性质yy)相比;
如果(cmp==0)
cmp=o1.性能比(o2.性能比);
返回cmp;
}
};
@sudocode给出了一个很好的答案,但我认为这对你来说太过分了。只需实现自定义比较器,比较
propertyX
,然后执行propertyY
。将此比较器用于集合.sort()
或数组.sort()
@sudocode给出了一个很好的答案,但我认为这对您来说太过分了。只需实现自定义比较器,比较propertyX
,然后执行propertyY
。将此比较器用于Collections.sort()
或Arrays.sort()
我不知道为什么@sudocode删除了他的答案的可能重复项。它指出了你的问题的答案。@Yishai在这篇文章中的答案演示了如何优雅地使用enum进行自定义排序和分组排序(多个参数),利用比较器链接。可能是重复的我不知道为什么@sudocode删除了他的答案。它指出了您的问题的答案。本文中@Yishai的答案演示了如何利用比较器链接优雅地使用enum进行自定义排序和分组排序(多个参数)。这个解决方案是否打破了comparator.compare方法的规则?我能想到的唯一一件事是,如果不以类似方式实现equals
。你有什么想法吗?这个解决方案没有打破Comparator.compare方法的规则吗?我能想到的唯一一件事是,如果不以类似方式实现equals
。你有什么想法吗?