私はオーバーその反復する単一のストリームを使用して、単一List<Integer>
に一緒にすべてのキーとすべての値を収集する次のマップ宣言リストにマップのキーと値を収集する方法
を考えますマップのエントリは1回だけです。
これまでのところ、私は2つの別々のストリームの繰り返しを使ってこれを行うことしかできませんでした。 1つはキー用、もう1つは値用です。
ワンパスで実行できますか?
私はオーバーその反復する単一のストリームを使用して、単一List<Integer>
に一緒にすべてのキーとすべての値を収集する次のマップ宣言リストにマップのキーと値を収集する方法
を考えますマップのエントリは1回だけです。
これまでのところ、私は2つの別々のストリームの繰り返しを使ってこれを行うことしかできませんでした。 1つはキー用、もう1つは値用です。
ワンパスで実行できますか?
これを試してみてください:
List<Integer> numbers = map.entrySet().stream()
.flatMap(e -> Stream.of(e.getKey(), e.getValue()))
.collect(Collectors.toList());
`マップ:: entrySet``で `
Map.entrySet().stream().flatMap(...)
はあなたのために行う必要があります。それぞれEntry
にはgetKey()
とgetValue()
がありますので、flatMap
ラムダの2つの長さのストリームにそれらを合成して、リストコレクタでまとめてください。
また、.entrySet().reduce()
を使用して、要素ごとにリスト要素を構築してください。あなたが機能Integer t(K key, V value)
を持っていると仮定すると
、
map.entrySet()
.stream()
.map(entry -> t(entry.key, entry.value))
.collect(Collectors.toList());
キーと値のペアが用意されています。 'Set'は' Collection'なので 'stream'することができますが、単に' List :: addAll'を使って 'Set'の内容を' List'に追加することもできます。 – njzk2