我已經讀過關於傳遞比較器的所有線程,我不明白爲什麼這個比較函數違反規則。如果有人可以清理自己的眼睛,這是很簡單的,我認爲,但我不能讓它比較一般合同違規
堆棧是:(簡體)
java.util.TimSort.mergeLo(TimSort.java:747)
java.util.TimSort.mergeAt(TimSort.java:483)
java.util.TimSort.mergeCollapse(TimSort.java:410)
我的對象
public class SleepDetails {
private DateTime time;
private SleepEnum type;
[...]
}
public enum SleepEnum {
DEEP(0), LIGHT(1), AWAKE(2), BEGIN(16), END(17);
[...]
}
比較靜態成類
Comparator<SleepDetails> comparator = new Comparator<SleepDetails>(){
public int compare(SleepDetails arg0, SleepDetails arg1) {
int res = arg0.getTime().compareTo(arg1.getTime());
if (res != 0)
return res;
if (arg0.getType() == arg1.getType())
return 0;
switch(arg0.getType()) {
case BEGIN:
return -1;
case END:
return 1;
default:
return 0;
}
}
};
主要我想按日期排序事件,如果兩個事件具有相同的日期時間作爲最後的開始事件和結束事件。
我沒有收集觸發的bug
'switch(arg0.getType())' - 你沒有比較。 –
呃@Bene什麼?類似的方法絕對不會遵循這一點。 'Integer.compare(1,2)!= Integer.compare(2,1)'。實際上,它們只是相匹配。 – Rogue
我的壞,不同的故事 – Bene