过滤字符串列表中的非整数

时间:2016-10-20 15:27:44

标签: java-8 java-stream

我正在读取文件并形成整数列表。

示例文件:

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));
    }

1 个答案:

答案 0 :(得分:4)

  • 您不需要scStatus&gt; FileInputStream&gt; InputStreamReader绕行以获得一条线。即使您需要BufferedReader,也有BufferedReader

  • 不要操纵Files.newBufferedReader内的现有收藏品;如果你回到那个,你最好留在普通的循环。对于Stream,有forEach来处理嵌套项,例如一行内的代币

  • 令牌本身可以使用简单的正则表达式进行过滤,flatMap表示必须至少有一个数字,这也会排除空字符串,但使用[0-9]+作为拆分模式而不是" *",甚至不首先创建空字符串。 " "永远不会因拆分操作而发生

...

null