代码
Collections.sort(users.getMenuProfiles(), new Comparator<UserMenuProfile>() {
@Override
public int compare(UserMenuProfile item1, UserMenuProfile item2) {
/* 报错前未添加
if (item1.getLastHitTime() == item2.getLastHitTime()) {
return 0;
}
*/
if (item1.getLastHitTime() == null) {
return 1;
} else if (item2.getLastHitTime() == null) {
return -1;
} else {
return item2.getLastHitTime().compareTo(item1.getLastHitTime());
}
}
});
异常
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeCollapse(TimSort.java:410)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
漏洞
if (item1.getLastHitTime() == null)
判定null大于任何值,这将导致同为null的两个值,却被判定为不相等,自相矛盾啊,哎,水哦!