我正在尝试使用新的流功能将字符串列表扩展为更长的列表。
segments = segments.stream() //segments is a List<String>
.map(x -> x.split("-"))
.collect(Collectors.toList());
然而,这会产生List<String[]>()
,当然不会编译。如何将最终流简化为一个列表?
答案 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的第一个解决方案。