使用Java 8 Stream API收集列表列表

时间:2016-10-03 18:18:48

标签: java java-8 java-stream

我有一个从文件中读取的以下线路

1 2 4.5

1 6 3 5.5 5.3 6

1 7.2 5 7

如果仅考虑整数,我如何在单个列表中收集这些行? (请注意,在每一行中,数字由一个或多个空格分隔)

这是我尝试过的,但是这给了我一个包含所有整数元素的列表。

        list = reader.lines()
            .map(m -> m.split("\\n"))
            .flatMap(Arrays::stream)
            .map(m -> m.split("\\s+"))
            .flatMap(Arrays::stream)
            .filter(f -> !f.contains("."))
            .map(Integer::parseInt)
            .collect(Collectors.toList());

2 个答案:

答案 0 :(得分:6)

reader.lines()
   .map(line -> Arrays.stream(line.split("\\s+"))
                      .filter(f -> !f.contains("."))
                      .map(Integer::parseInt)
                      .collect(Collectors.toList())
   .collect(Collectors.toList())

答案 1 :(得分:3)

这应该可以解决问题。

list = reader.lines()
    .map(line -> Arrays.stream(line.split("\\s+"))
        .filter(number -> !number.contains("."))
        .map(Integer::parseInt)
        .collect(Collectors.toList()))
    .collect(Collectors.toList());

您可能还想过滤空行:

 list = reader.lines()
    .map(line -> Arrays.stream(line.split("\\s+"))
        .filter(number -> !number.contains("."))
        .map(Integer::parseInt)
        .collect(Collectors.toList()))
    .map(l -> !l.isEmpty())
    .collect(Collectors.toList());