猿问

Collections.sort报错,大神求分析、求答案

 Collections.sort(lcd1, new Comparator<CouponDto>(){
                    @Override
                    public int compare(CouponDto o1, CouponDto o2) {
                            if(o1.getCoupon().getListOrder2() > o2.getCoupon().getListOrder2()){
                                return -1;
                            }
                            if(o1.getCoupon().getListOrder2() == o2.getCoupon().getListOrder2()){
                                return 0;
                            }
                            return  1;
                    };

                });
    报Comparison method violates its general contract异常
            改成
    Collections.sort(lcd1, new Comparator<CouponDto>(){
                    @Override
                    public int compare(CouponDto o1, CouponDto o2) {
                            return -(o1.getCoupon().getListOrder2() - o2.getCoupon().getListOrder2());
                    };

                });
            就不再报错;
            各位大神,这个是怎么回事


千万里不及你
浏览 1281回答 1
1回答

不负相思意

你的代码虽然满足了自反性,但是不满足偏序。jdk&nbsp;1.7还要求偏序性。 比如a&nbsp;=&nbsp;10&nbsp;b&nbsp;=&nbsp;8&nbsp;c&nbsp;=&nbsp;4,那么你的代码出现&nbsp;comp(a,b)&nbsp;==&nbsp;comp(a,&nbsp;c),sort会假设b=c但是实际上是b>c
随时随地看视频慕课网APP

相关分类

Java
我要回答