我想使我的代码看起来更有效率。目前我有这样的东西:
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
移到lambda里面,但是我想分开保存我的方法。
也许有人有其他想法,请随时发表任何想法。干杯!
答案 0 :(得分:1)
假设extractFileNumber
位于类Main
中,使用流api可以使其更短:
return Stream.of(files).map(Main::extractFileNumber).collect(Collectors.toList());
答案 1 :(得分:1)
您可以这样做
List<Integer> result = Arrays.stream(files)
.map(s -> extractFileNumber(s))
.collect(Collectors.toList());
如果要使用方法引用,应该是这样,
List<Integer> result = Arrays.stream(files)
.map(FileNameEx::extractFileNumber)
.collect(Collectors.toList());
FileNameEx
是您的班级。您不能将this
引用用于static
方法。