It's happening on my Android application & here is the stack trace:
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)
Here is my sort logic:
private static void sortFiles(List<File> listFiles, int sortDirection) {
try {
if (sortDirection == sortLatestFirst) {
Collections.sort(listFiles, new LatestFirstComparator());
...
Here is the comparator:
class LatestFirstComparator implements Comparator<File> {
@Override
public int compare(File f1, File f2) {
return Long.compare(f2.lastModified(), f1.lastModified());
}
}
I've found related questions & other solutions, but none of them solves my problem. Moreover, this is not a consistent behavior, but happening only with some of the app users.