从字符串数组中获取整数列表

问题描述 投票:1回答:2

我想让我的代码看起来更有效率。目前我有这样的事情:

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

我想改变什么?可能使用stream api而不是foreach循环。第一个想法是这样的:

Arrays.stream(files).map(this::extractFileNumber).collect(Collectors.toList());

但因为这些方法是静态的,我不能像这样使用它。显然我可以在lambda中移动extractFileNumber,但我想分开保留我的方法。

也许有人有其他想法,请随时发表任何想法。干杯!

java collections stream
2个回答
1
投票

使用stream api可以缩短它,假设extractFileNumber在类Main中:

return Stream.of(files).map(Main::extractFileNumber).collect(Collectors.toList());

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方法。

© www.soinside.com 2019 - 2024. All rights reserved.