したがって、別のストリームで一連の変換を行うことで取得する_Stream<Collection<Long>>
_があります。
私がする必要があるのは、_Stream<Collection<Long>>
_を1つの_Collection<Long>
_に収集することです。
これらをすべて次のようなリストにまとめることができます。
_<Stream<Collection<Long>> streamOfCollections = /* get the stream */;
List<Collection<Long>> listOfCollections = streamOfCollections.collect(Collectors.toList());
_
そして、そのコレクションのリストを反復処理して、それらを1つにまとめることができました。
ただし、.map()
または.collect()
を使用して、コレクションのストリームを1つの_Collection<Long>
_に結合する簡単な方法が必要だと思います。どうすればいいのか考えられません。何か案は?
この機能は、ストリームで flatMap
メソッド を呼び出すことで実現できます。これは、Function
アイテムを、収集可能な別のStream
アイテムにマップするStream
を受け取ります。
ここで、flatMap
メソッドはStream<Collection<Long>>
をStream<Long>
に変換し、collect
はそれらをCollection<Long>
に収集します。
Collection<Long> longs = streamOfCollections
.flatMap( coll -> coll.stream())
.collect(Collectors.toList());
collect
を使用し、サプライヤ(ArrayList::new
部分)を提供することでこれを行うことができます。
Collection<Long> longs = streamOfCollections.collect(
ArrayList::new,
ArrayList::addAll,
ArrayList::addAll
);
不要な場合はクラスを指定する必要はありません。より良い解決策は次のとおりです。
Collection<Long> longs = streamOfCollections.collect(
ArrayList::new,
Collection::addAll,
Collection::addAll
);
ArrayListは必要ないが、HashSetは必要だとしましょう。そして、1行だけ編集する必要もあります。