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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从字符串数组中获取整数列表相关的知识,希望对你有一定的参考价值。

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

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,但我想分开保留我的方法。

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

答案

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

return Stream.of(files).map(Main::extractFileNumber).collect(Collectors.toList());
另一答案

你可以这样做,

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

以上是关于从字符串数组中获取整数列表的主要内容,如果未能解决你的问题,请参考以下文章

在java中从用户获取整数数组输入

Android - 如何显示包含从片段中获取的字符串的快餐栏

如何使列表视图出现在片段中?

当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作

如何从字符串中提取数字并获取整数数组?

整数的分隔列表