比较方法违反其一般合同


我正在按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;
    }
});


编辑:这不是重复的,因为它对我来说非常特定。我看到了其他答案,但是我仍然不知道为什么我收到此错误,我的代码似乎应该可以正常工作

最佳答案

考虑以下三个等级:

1
3
5    // unrealistic


根据您的比较器,不切实际的评分等于所有其他评分;因此,即使1和3彼此不相等,它们也都等于5。因此,您的比较器没有实现传递关系,因此比较器的客户端无法获得一致的结果;一切都变了样。

关于java - 无法看到为什么我收到“比较方法违反其一般契约(Contract)”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34296426/

10-09 13:14