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
都没有意义。

我弄明白了。谢谢老兄,我弄明白了。谢谢老兄。