我正在尝试根据日期(以字符串形式)对对象列表进行排序。日期采用字符串形式,如果没有日期,则对象的日期属性值分配为“-”。 我正在执行下面的代码片段来对其进行排序,但是在某一时刻它给了我“比较方法违反了其一般契约”异常。我无法弄清楚契约(Contract)在哪里被破坏以及如何被破坏。
我查看了其他线程,但没有得到太多帮助。
任何输入我可能做错了什么?
Collections.sort(listOfObjects, new Comparator<ObjectType>(){
@Override
public int compare(ObjectType objectOne, ObjectType objectTwo) {
if(sortType.equalsIgnoreCase("asc")){
if(objectOne.getSomeDate().equalsIgnoreCase("-"))
return 1;
if(objectTwo.getDeliveryQueueResponseDTO().getSomeDate().equalsIgnoreCase("-"))
return -1;
sort = objectOne.getSomeDate().compareToIgnoreCase(objectTwo.getSomeDate());
}
else
sort = objectTwo.getSomeDate().compareToIgnoreCase(objectOne.getSomeDate());
}
return sort;
}
最佳答案
您应该正确实现与 "-"
(空日期)之间的比较。
如果你不这样做,你就会得到 a="-"
和 b="-"
你就会得到 compare(a,b)== 1
和 compare(b,a)==1
所以 a>b
和 b>a
没有意义.
关于java - 根据日期属性(字符串类型)对对象列表进行排序时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53324946/