我正在读取文件并形成整数列表。
示例文件:
1 1 2 3 4
2 2 5 abc
4 2 8
在运行以下代码时,由于" abc"无法转换为整数,因此失败。
如果可以在Java 8中以更干净的方式过滤掉非整数字段,请告诉我。例如:使用过滤器?
try (BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(file)))) {
List<Integer> allValues = new ArrayList<>();
br.lines().forEach(
strLine -> {
List<String> wordsList = Arrays.asList(strLine.trim().split(" "));
List<Integer> routes = wordsList.stream()
.filter(e -> e != null && !e.isEmpty())
.map(Integer::valueOf)
.collect(Collectors.toList());
allValues.addAll(routes);
});
allValues.forEach(str -> System.out.print(str));
}
答案 0 :(得分:4)
您不需要scStatus
&gt; FileInputStream
&gt; InputStreamReader
绕行以获得一条线。即使您需要BufferedReader
,也有BufferedReader
不要操纵Files.newBufferedReader
内的现有收藏品;如果你回到那个,你最好留在普通的循环。对于Stream,有forEach
来处理嵌套项,例如一行内的代币
令牌本身可以使用简单的正则表达式进行过滤,flatMap
表示必须至少有一个数字,这也会排除空字符串,但使用[0-9]+
作为拆分模式而不是" *"
,甚至不首先创建空字符串。 " "
永远不会因拆分操作而发生
...
null