从字符串数组中获取整数列表
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
方法。
以上是关于从字符串数组中获取整数列表的主要内容,如果未能解决你的问题,请参考以下文章
Android - 如何显示包含从片段中获取的字符串的快餐栏