比较方法违反了其一般合同
我按等级排序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;
}
});
编辑:这不是重复的,因为它对我来说非常具体。我已经看到其他答案,但我仍然无法弄清楚为什么我收到此错误,我的代码似乎应该工作正常
答案 0 :(得分:8)
考虑这三个评级:
1
3
5 // unrealistic
根据您的比较器,不切实际的评级与所有其他评级相等;所以即使1和3彼此不相等,它们都相当于5.所以你的比较器没有实现传递关系,所以你的比较器的客户端无法获得一致的结果;一切都很糟糕。