Java 根据日期属性(字符串类型)对对象列表排序时出现异常
我正在尝试根据日期(字符串)对对象列表进行排序。日期是字符串形式,如果没有日期,则对象的日期属性值为“-”。 我正在做下面的代码片段来对它进行排序,但是在某一点上它给了我“比较方法违反了它的一般约定”例外。我无法弄清楚合同在哪里违约以及如何违约 我查看了其他线索,但没有得到多少帮助 任何输入我可能做错了什么Java 根据日期属性(字符串类型)对对象列表排序时出现异常,java,collections,comparator,Java,Collections,Comparator,我正在尝试根据日期(字符串)对对象列表进行排序。日期是字符串形式,如果没有日期,则对象的日期属性值为“-”。 我正在做下面的代码片段来对它进行排序,但是在某一点上它给了我“比较方法违反了它的一般约定”例外。我无法弄清楚合同在哪里违约以及如何违约 我查看了其他线索,但没有得到多少帮助 任何输入我可能做错了什么 Collections.sort(listOfObjects, new Comparator<ObjectType>(){ @Override
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;
}
Collections.sort(ListofObject,new Comparator(){
@凌驾
公共int比较(ObjectType objectOne、ObjectType objectTwo){
if(sortType.equalsIgnoreCase(“asc”)){
if(objectOne.getSomeDate().equalsIgnoreCase(“-”)
返回1;
if(objectTwo.getDeliveryQueueResponseDTO().getSomeDate().equalsIgnoreCase(“-”)
返回-1;
sort=objectOne.getSomeDate().compareToIgnoreCase(objectTwo.getSomeDate());
}
其他的
sort=objectTwo.getSomeDate().compareToIgnoreCase(objectOne.getSomeDate());
}
返回排序;
}
这基本上意味着您的比较器是不可传递的。有关更多详细信息,请查看以下问题:
这基本上意味着您的比较器是不可传递的。有关更多详细信息,请查看以下问题:
您应该正确地执行到
“-”
(空日期)之间的比较
如果你没有得到
a=“-”
和b=“-”
你有比较(a,b)==1
和比较(b,a)==1
,所以a>b
和b
没有意义。你应该正确地实现到“
”(空日期)之间的比较
如果你没有得到
a=“-”
和b=“-”
你就得到了比较(a,b)==1
和比较(b,a)==1
所以a>b
和b>a
都没有意义。我弄明白了。谢谢老兄,我弄明白了。谢谢老兄。