Как говорят другие, проблема заключается в том, что значение последней измененной временной метки может измениться во время операции сортировки. Для надежной сортировки необходимо кэшировать значения на время операции сортировки:
private static void sortFiles(List<File> listFiles, int sortDirection) {
if(listFiles.isEmpty()) return;
Map<File,Long> cache = new HashMap<>();
Comparator<File> byTime
= Comparator.comparing(f -> cache.computeIfAbsent(f, File::lastModified));
if(sortDirection == sortLatestFirst) byTime = byTime.reversed();
listFiles.sort(byTime);
}
Я предполагаю, что вы все равно используете механизм уведомлений об изменениях, чтобы решить, когда следует перезагрузить список файлов,таким образом, операция сортировки не должна иметь с ней дело.
Если вы хотите поддерживать уровень API, который не поддерживает функции Java 8, вы должны использовать более подробный вариант
private static void sortFiles(List<File> listFiles, int sortDirection) {
if(listFiles.isEmpty()) return;
final Map<File,Long> cache = new HashMap<File,Long>();
Comparator<File> byTime = new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
Long t1 = cache.get(f1), t2 = cache.get(f2);
if(t1 == null) cache.put(f1, t1 = f1.lastModified());
if(t2 == null) cache.put(f2, t2 = f2.lastModified());
return t1.compareTo(t2);
}
};
if(sortDirection == sortLatestFirst) byTime = Collections.reverseOrder(byTime);
Collections.sort(listFiles, byTime);
}