它发生在我的 Android 应用程序上,这是堆栈跟踪:
Caused by java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:864)
at java.util.TimSort.mergeAt(TimSort.java:481)
at java.util.TimSort.mergeForceCollapse(TimSort.java:422)
at java.util.TimSort.sort(TimSort.java:219)
at java.util.TimSort.sort(TimSort.java:169)
at java.util.Arrays.sort(Arrays.java:2023)
at java.util.Collections.sort(Collections.java:1883)
这是我的排序逻辑:
private static void sortFiles(List<File> listFiles, int sortDirection) {
try {
if (sortDirection == sortLatestFirst) {
Collections.sort(listFiles, new LatestFirstComparator());
...
这是比较器:
class LatestFirstComparator implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
return Long.compare(f2.lastModified(), f1.lastModified());
}
}
我找到了相关的问题和其他解决方案,但没有一个能解决我的问题。此外,这不是一致的行为,而是仅发生在某些应用程序用户身上。