【问题标题】:Java stream collect arrays into one listJava流将数组收集到一个列表中
【发布时间】:2015-11-12 03:31:30
【问题描述】:
我正在尝试使用新的流功能将字符串列表扩展为更长的列表。
segments = segments.stream() //segments is a List<String>
.map(x -> x.split("-"))
.collect(Collectors.toList());
然而,这会产生一个List<String[]>(),当然不会编译。如何将最终流缩减为一个列表?
【问题讨论】:
标签:
java
java-8
java-stream
【解决方案1】:
使用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());
【解决方案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 的第一个解决方案。