2016-07-26 4 views
1

私はオーバーその反復する単一のストリームを使用して、単一List<Integer>に一緒にすべてのキーとすべての値を収集する次のマップ宣言リストにマップのキーと値を収集する方法

を考えますマップのエントリは1回だけです。

これまでのところ、私は2つの別々のストリームの繰り返しを使ってこれを行うことしかできませんでした。 1つはキー用、もう1つは値用です。

ワンパスで実行できますか?

+0

キーと値のペアが用意されています。 'Set'は' Collection'なので 'stream'することができますが、単に' List :: addAll'を使って 'Set'の内容を' List'に追加することもできます。 – njzk2

答えて

2

これを試してみてください:

List<Integer> numbers = map.entrySet().stream() 
    .flatMap(e -> Stream.of(e.getKey(), e.getValue())) 
    .collect(Collectors.toList()); 
`マップ:: entrySet``で ` >を設定して
3

Map.entrySet().stream().flatMap(...)はあなたのために行う必要があります。それぞれEntryにはgetKey()getValue()がありますので、flatMapラムダの2つの長さのストリームにそれらを合成して、リストコレクタでまとめてください。

また、.entrySet().reduce()を使用して、要素ごとにリスト要素を構築してください。あなたが機能Integer t(K key, V value)を持っていると仮定すると

+0

ここでflatMapを使用する理由がわかりません – njzk2

+0

@ njzk2私の印象は、キーのすべてとすべての値を、何らかの形で組み合わせるのではなく、単一のリストに入れたいという印象でした。 1対1ではないので、flatMapを使用したいと考えています。 –

+0

大丈夫です、確かに意味があります。 – njzk2

0

map.entrySet() 
    .stream() 
    .map(entry -> t(entry.key, entry.value)) 
    .collect(Collectors.toList()); 
関連する問題