昨天遇到一个很奇怪的异常,异常信息如下:
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:899)
at java.util.TimSort.mergeAt(TimSort.java:516)
at java.util.TimSort.mergeCollapse(TimSort.java:441)
at java.util.TimSort.sort(TimSort.java:245)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1462)
at com.example.testaspect.demo.TestC2.sortDateAndTimestamps(TestC2.java:33)
at com.example.testaspect.demo.TestC2.main(TestC2.java:50)
报错的代码如下:
list.sort((o1, o2) -> {
if (o1 != null && o2 != null) {
return o1.compareTo(o2);
}
return 0;
});
看着语法好像也没什么问题啊,感觉很奇怪。而且在本地复现也没有复现,查看源码也是云里雾里的,说原因是判断一个len2==0了报错了,但是中间的处理逻辑十分复杂难懂,就在网上找答案。
很多解答说可以配置Java环境
System.setProperty("java.util