2016-03-31 8 views
-3

で一緒にすべてのリスト値をマージします。マップエントリのStreamは、私のような地図に変換したいマップ

+2

回答者には、このような質問に対する解決策を提示しないでください。我々は*ここでそれらを励ましたくない*。最初に自分で試してみましょう。 – Maroun

+0

は解決策ではありません。それはどういう意味ですか? – ypriverol

+1

を参照してください。http://stackoverflow.com/questions/29826417/how-to-retainall-of-list-of-lists-using-stream-reduce/29826611 –

答えて

4

あなただけ

List<String> result = map.values().stream().flatMap(List::stream).collect(Collectors.toList()); 

を持つことができます。これは、によって形成されたストリームへvalues()その後、フラットマップ各リストとマップの値を取得結果をリストにまとめます。

さらに、各リストをフラットにマッピングせずに、より効果的な別の代替方法として、を呼び出すことによってStream<List<String>>values().stream()が返す)を直接収集することができます。

List<String> result = map.values().stream().collect(ArrayList::new, List::addAll, List::addAll); 
1

使用flatMap

List<String> list = map.entrySet() 
         .stream() 
         .flatMap(e->e.getValue().stream()) 
         .collect(Collectors.toList()); 
+0

Eran:上記のステートメントの結果は、各操作でより多くの一時的なオブジェクト(flatMapとcollect)? –

+0

@Ravindrababuもっと一時的なオブジェクトは何に比べて? – Eran

+0

Scalaのように、不変なコレクションを返すmap.flatMap()と不変なコレクションの新しいセットを返すcollect()を参照してください。 –

関連する問題