Я бы хотел, чтобы мой код выглядел более эффективным. В настоящее время я получил что-то вроде этого:
private static String[] getAllFilesFromDirectory(String path) {
File file = new File(path);
String fileNamePattern = file.getName() + ".*\\.[0-9]*\\.GOOD";
File dir = new File(file.getParent());
String[] files = dir.list((currDir, currName) -> currName.matches(fileNamePattern));
return files;
}
private static List<Integer> getAllFileNumbers(String path) {
String[] files = getAllFilesFromDirectory(path);
List<Integer> fileNumbers = new ArrayList<>();
for (String currentFile : files) {
fileNumbers.add(extractFileNumber(currentFile));
}
return fileNumbers;
}
private static Integer extractFileNumber(String fileName) {
return Integer.parseInt(fileName.split("\\.")[2]);
}
Первым делом первым делом. Для метода getAllFileNumbers
я передаю путь к каталогу, после чего получаю массив файлов в этом каталоге с определенным шаблоном. И из каждого файла мне нужно извлечь номер.
Пример:
test.txt.1.fail
test2.txt.2.good
test3.pdf.1.good
Здесь я возвращаю список следующих чисел: 1, 2, 1
.
Что бы я хотел изменить? Вероятно, используйте потоковый API вместо цикла foreach.
Первая идея была примерно такой:
Arrays.stream(files).map(this::extractFileNumber).collect(Collectors.toList());
Но так как методы статические, я не могу использовать их вот так.
Очевидно, что я мог бы перемещать extractFileNumber
внутри лямбды, но я хотел бы сохранить свой метод отдельно.
Может быть, у кого-то есть другие идеи, пожалуйста, не стесняйтесь публиковать любые идеи. Ура!