将集合流合并到一个集合中 - Java 8

2022-09-01 04:56:56

因此,我有一个通过在另一个流上进行一系列转换而获得的。Stream<Collection<Long>>

我需要做的是收集到一个.Stream<Collection<Long>>Collection<Long>

我可以将它们全部收集到如下所示的列表中:

<Stream<Collection<Long>> streamOfCollections = /* get the stream */;

List<Collection<Long>> listOfCollections = streamOfCollections.collect(Collectors.toList());

然后,我可以循环访问该集合列表,将它们合并为一个。

但是,我想必须有一种简单的方法可以使用 or 将集合流合并为一个集合。我只是想不出该怎么做。有什么想法吗?Collection<Long>.map().collect()


答案 1

此功能可以通过调用流上的 flatMap 方法来实现,该方法采用 将项映射到可在其上收集的另一个项。FunctionStreamStream

在这里,该方法将 转换为 a ,并将它们收集到 .flatMapStream<Collection<Long>>Stream<Long>collectCollection<Long>

Collection<Long> longs = streamOfCollections
    .flatMap( coll -> coll.stream())
    .collect(Collectors.toList());

答案 2

您可以通过使用收集和提供供应商(零件)来执行此操作:ArrayList::new

Collection<Long> longs = streamOfCollections.collect(
    ArrayList::new, 
    ArrayList::addAll,
    ArrayList::addAll
);