我已经读过关于传递比较器的所有线程,我不明白为什么这个比较函数违反规则。如果有人可以清理自己的眼睛,这是很简单的,我认为,但我不能让它比较一般合同违规
堆栈是:(简体)
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