从昨天开始,我的代码中出现错误,我不确定为什么!我在Google上搜索了很多,然后找到了此 Stack-Post。
我使用此功能按名称对用户进行排序并创建日期。该功能已经运行了2年,现在我遇到了一个用户错误,我不知道发生了什么变化。我尝试检查我的数据是否有损坏,但找不到任何错误。
在阅读了Stack-Post之后,我仍然不完全了解问题所在或项目中发生了什么变化。
public void sortUsers(List<Users> sortList) {
Collections.sort(sortList, new Comparator<Users>() {
public int compare(Users user1, Users user2) {
Integer comp = 0;
comp = user1.getUsername().compareTo(user2.getUsername());
if (comp == 0) {
comp = user1.getCreateDate().before(user2.getCreateDate()) ? -1 : 1;
}
return comp;
}
});
}
Run Code Online (Sandbox Code Playgroud)
comp = user1.getCreateDate().before(user2.getCreateDate()) ? -1 : 1;
Run Code Online (Sandbox Code Playgroud)
如果日期相等,则该行永远不会返回零。这意味着它不是反对称的(即sgn(a.compareTo(b)) = -sgn(b.compareTo(a)))。
确切的解决方法取决于getCreateDate()返回的类,但是可能类似于:
comp = user1.getCreateDate().compareTo(user2.getCreateDate());
Run Code Online (Sandbox Code Playgroud)
但是,构造兼容的比较器的更简单方法是:
Comparator.comparing(Users::getUsername).thenComparing(Users::getCreateDate)
Run Code Online (Sandbox Code Playgroud)
或类似。