java - 根据日期属性(字符串类型)对对象列表进行排序时出现异常

标签 java collections comparator

我正在尝试根据日期(以字符串形式)对对象列表进行排序。日期采用字符串形式,如果没有日期,则对象的日期属性值分配为“-”。 我正在执行下面的代码片段来对其进行排序,但是在某一时刻它给了我“比较方法违反了其一般契约”异常。我无法弄清楚契约(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)== 1compare(b,a)==1 所以 a>bb>a 没有意义.

关于java - 根据日期属性(字符串类型)对对象列表进行排序时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53324946/

相关文章:

java - 如何在 spring-rabbitmq + spring cloud 中手动断开 Channel 与监听器的连接

c# - 使用内部或私有(private)添加、删除功能创建类型化集合/列表的最佳实践?

c - qsort 结构数组降序

c++ - 升压变体比较器

java - 如何使用Hadoop作业检查大gzip文件(.gz)的完整性?

java - 通过多线程客户端使用 JMS

java - 如何告诉 EclipseLink 在全局范围内对某种类型使用 XmlAdapter?

java - 将对象添加到列表中的 Lambda 表达式

java - Java 中哪种排序集合实现的内存占用最小?

Java 类型参数不在其范围内