Java Collections.Sort比较方法违反其常规协定

时间:2019-10-14 07:53:41

标签: java collections

自昨天以来,我的代码中出现错误,我不确定为什么! 我在Google上搜索了很多,发现了this Stack-Post。

我使用此功能按名称对用户进行排序并创建日期。 该功能已经运行了2年,现在我遇到了一个用户错误,我不知道发生了什么变化。 我尝试检查我的数据是否有损坏,但找不到任何错误。

在阅读完Stack-Post之后,我仍然不完全了解问题所在或项目中发生了什么变化。

SELECT 
Number_1,
Number_2,
Number_1 + Number_2 AS Interim_Result,
iif(Interim_Result > 20, over 20, under 20) AS Result
FROM 
NUMBERS

1 个答案:

答案 0 :(得分:9)

comp = user1.getCreateDate().before(user2.getCreateDate()) ? -1 : 1;

在日期相等的情况下,此行永远不会返回零。这意味着它不是反对称的(即sgn(a.compareTo(b)) = -sgn(b.compareTo(a)))。

确切的解决方法取决于返回的类getCreateDate(),但是可能类似于:

comp = user1.getCreateDate().compareTo(user2.getCreateDate());

但是,构造兼容的比较器的更简单方法是:

Comparator.comparing(Users::getUsername).thenComparing(Users::getCreateDate)

或类似的