Java流将数组收集到一个列表中

时间:2015-11-12 03:31:30

标签: java java-8 java-stream

我正在尝试使用新的流功能将字符串列表扩展为更长的列表。

segments = segments.stream() //segments is a List<String>
    .map(x -> x.split("-"))
    .collect(Collectors.toList());

然而,这会产生List<String[]>(),当然不会编译。如何将最终流简化为一个列表?

2 个答案:

答案 0 :(得分:10)

使用flatMap

segments = segments.stream() //segments is a List<String>
    .map(x -> x.split("-"))
    .flatMap(Arrays::stream)
    .collect(Collectors.toList());

您还可以使用Pattern.splitAsStream删除中间数组:

segments = segments.stream() //segments is a List<String>
    .flatMap(Pattern.compile("-")::splitAsStream)
    .collect(Collectors.toList());

答案 1 :(得分:2)

您需要使用flatMap

segments = segments.stream() //segments is a List<String>
    .map(x -> x.split("-"))
    .flatMap(Stream::of)
    .collect(Collectors.toList());

请注意,Stream.of(T... values)只是调用Arrays.stream(T[] array),因此此代码等同于@ TagirValeev的第一个解决方案。