所以我通过在另一个流上进行一系列转换来获得Stream<Collection<Long>>
。
我需要做的是将Stream<Collection<Long>>
收集到一个Collection<Long>
。
我可以将它们全部收集到这样的列表中:
<Stream<Collection<Long>> streamOfCollections = /* get the stream */;
List<Collection<Long>> listOfCollections = streamOfCollections.collect(Collectors.toList());
然后我可以遍历该集合列表,将它们合并为一个。
但是,我想必须有一种简单的方法,使用Collection<Long>
或.map()
将集合流合并为一个.collect()
。我只是想不出怎么做。有什么想法吗?
答案 0 :(得分:50)
可以通过调用流上的the flatMap
method来实现此功能,该Function
会将Stream
项目映射到您可以收集的另一个Stream
此处,flatMap
方法将Stream<Collection<Long>>
转换为Stream<Long>
,collect
将其收集到Collection<Long>
。
Collection<Long> longs = streamOfCollections
.flatMap( coll -> coll.stream())
.collect(Collectors.toList());
答案 1 :(得分:12)
您可以使用collect
并提供供应商(ArrayList::new
部分)来执行此操作:
Collection<Long> longs = streamOfCollections.collect(
ArrayList::new,
ArrayList::addAll,
ArrayList::addAll
);
答案 2 :(得分:0)
不需要时不需要指定类。 更好的解决方案是:
Collection<Long> longs = streamOfCollections.collect(
ArrayList::new,
Collection::addAll,
Collection::addAll
);
说,您不需要ArrayList但需要HashSet,那么您还只需要编辑一行。