comparator 排序报错IllegalArgumentException

运行环境 | eclipse 12 | jdk1.8 | 数据量 100万

使用comparator 排序报错,十几条不出任何问题,正常排序,当超过100条数据时跑错java.lang.IllegalArgumentException

程序要对100万条json数据进行排序

1
2
3
4
5
6
7
8
9
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(Unknown Source)
at java.util.TimSort.mergeAt(Unknown Source)
at java.util.TimSort.mergeCollapse(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.ArrayList.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at movieDemo.Demo4.main(Demo4.java:46)

解决方法:
需要判断 结果 等于0的情况

加上等于零的情况,正常排序
if(o1.getValue() == o2.getValue()) {
return 0;
}
或者使用三目运算嵌套
return o1.getValue() - o2.getValue() == 0 ? 0 : o1.getValue() - o2.getValue() > 0 ?-1 : 1 ;

反例:
return o1.getValue() - o2.getValue() > 0 ? -1 : 1;


本文结束感谢您的阅读,本文原创–支持原创
有问题请联系我--strivedeer@163.com