Как правильно отсортировать файлы
Хочу отсортировать фолдеры по лексикографическому порядку (алфавитному), но возникает ошибка в коде ниже:
Bad return type in lambda expression: boolean cannot be converted to int
File file = new File(path.toString());
File[] filesAndFolders = file.listFiles();
Arrays.stream(filesAndFolders)
.sorted((f1, f2) -> f1.toString().equalsIgnoreCase(f2.toString()));
Буду рад помощи, Path - любой путь в системе.
Ответы (1 шт):
Автор решения: Alex Rudenko
→ Ссылка
Во-первых, сортировка выполняется не по методу equals/equalsIgnoreCase, для неё используется либо метод Comparable::compareTo либо Comparator::compare(T a, T b).
Во-вторых, в данном случае сортировка при помощи стрима будет безрезультатна, так как не вызывается ни одна терминальная операция (Stream::sorted - промежуточная (intermediate) операция), следует использовать Arrays::sort(T[], Comparator<?> super T) c
Arrays.sort(filesAndFolders, Comparator.comparing(f -> f.toString().toLowerCase()));
или
Arrays.sort(filesAndFolders, (f1, f2) ->
f1.toString().compareToIgnoreCase(f2.toString())
);