參考這篇:https://www.cnblogs.com/wendelhuang/p/7356797.html
我的問題和這一篇的問題一樣,引進了對 null值的處理,Java 1.6之前沒有問題的,Java1.7、1.8之後更換了底層的排序算法,對我們自己實作的 Comparator接口的 compare方法有一定的要求:自反、傳遞、對稱。
以下對null的處理不滿足上述要求的:
if (bedNo1 == null || bedNo2 == null){
return 1;
}
上述連結給出了一種方案,不同情況分别傳回 1、-1、0,而不是始終傳回 1,如下:
if (this.xxx == null && o.xxx == null) {
return 0;
}
if (this.xxx == null) {
return 1;
}
if (o.xxx == null) {
return -1;
}
我自己也有另外一種方案,但是性能可能會差一點,因為引入了清單複制的操作,但也打算分享出來,參考下思路什麼的。
Mine方案:比如需要根據 bedNo進行排序,我先将清單中 依據bedNo是否為null分為 兩個清單,隻對有值的清單進行排序。