看不出为什么我得到"比较方法违反其一般合同"的错误

cod*_*441 2 java sorting

比较方法违反了其总合同

我按等级排序是一个double.任何人都可以看到为什么我收到此错误?

Collections.sort(productsMasterList, new Comparator<Product>() {
    @Override
    public int compare(Product o1, Product o2) {
        final double rating1 = o1.getRating();
        final double rating2 = o2.getRating();
        boolean realisticRating1 = rating1 < 4.8;
        boolean realisticRating2 = rating2 < 4.8;
        return rating1 > rating2 && realisticRating1 ? -1 : rating2 > rating1 && realisticRating2 ? 1 : 0;
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:这不是重复,因为它对我来说非常具体.我已经看到其他答案,但我仍然无法弄清楚为什么我收到此错误,我的代码似乎应该工作正常

rua*_*akh 8

考虑这三个评级:

1
3
5    // unrealistic
Run Code Online (Sandbox Code Playgroud)

根据你的比较器,不切实际的评级与所有其他评级相当; 所以即使1和3彼此不相等,它们都相当于5.所以你的比较器没有实现传递关系,所以比较器的客户端无法得到一致的结果; 一切都出来了.