私は以下の構造を扱っています。ネストされたHashMapsをラムダでカウント
Map<String, HashMap<Integer, HashMap<Integer, Integer>>> ...
私は内部のHashMapの値でカウンタをインクリメントしたいと思います。 反復関数またはネストループを使用して簡単に行うことができます。 しかし、私はlambdasを使用してエレガントなソリューションを探しています。
私は以下の構造を扱っています。ネストされたHashMapsをラムダでカウント
Map<String, HashMap<Integer, HashMap<Integer, Integer>>> ...
私は内部のHashMapの値でカウンタをインクリメントしたいと思います。 反復関数またはネストループを使用して簡単に行うことができます。 しかし、私はlambdasを使用してエレガントなソリューションを探しています。
Map
の値のStream
を取得するには、.values().stream()
を使用できます。次に、Stream<Integer>
が得られるまで、入れ子構造をはがすために繰り返し.flatMap
を適用することができます。次に.mapToInt
を使用してIntStream
を作成し、すべての値の.sum()
を取得することができます。
int sum = outerMostMap.values().stream() // HashMap<Integer, HashMap<Integer, Integer>>
.flatMap(map -> map.values().stream()) // HashMap<Integer, Integer>
.flatMap(map -> map.values().stream()) // Integer
.mapToInt(Integer::intValue) // int
.sum();
私が正しく理解していれば、最も内側の 'Map'の値の和を求めたいでしょうか? –
4castle
正確には、それは私の目標です –
今のところあなたの質問は不明です。 「カウンタをインクリメントする」とは「counter = counter + 1;」と解釈されるかもしれませんが、あなたは 'counter 'とみなしています。 [編集]オプションを使用して質問を明確にします(入力と期待される結果の例が望ましい)。 – Pshemo