我正在尝试对 List<Map<string,Object>
进行排序基于 map 内的日期属性。这是我使用的代码。但它会抛出异常,如下所示。
代码:
Collections.sort(dataList,new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date1 = null;
Date date2 = null;
try {
date1 = formatter.parse(o1.get("date").toString());
date2 = formatter.parse(o2.get("date").toString());
} catch (ParseException e) {
}
if(date1!=null && date2!=null){
return date1.compareTo(date2);
}else {
return 0;
}
}
});
异常(exception):
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:868)
at java.util.TimSort.mergeAt(TimSort.java:485)
at java.util.TimSort.mergeCollapse(TimSort.java:410)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
任何人都可以帮我找出我的代码的问题吗?感谢任何帮助
最佳答案
您的比较不具有传递性。
- 对象 A:空。
- 对象 B:2000 年 1 月 1 日。
- 对象 C:2010 年 1 月 1 日。
A == B. A == C. B < C.
关于java - 比较方法违反了它的一般契约!基于 map 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559022/