Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中实现按propertyX、按propertyY、按propertyZ排序_Java_Sorting_Collections - Fatal编程技术网

在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
。你有什么想法吗?