ウマルHaque:
私が持っているMap<String, Double>
、と、2でマップ内のすべての値を掛けると言うが、ヌルとしてヌルを維持したいです。
私は明らかにこれを行うには、forループを使用することができますが、そうするクリーンな方法があったか不思議でしたか?
Map<String, Double> someMap = someMapFunction();
Map<String, Double> adjustedMap = new Hashmap<>();
if (someMap != null) {
for (Map.Entry<String,Double> pair : someMap.entryset()) {
if (pair.getValue() == null) {
adjustedMap.put(pair.getKey(), pair.getValue());
} else {
adjustedMap.put(pair.getKey(), pair.getValue()*2)
}
}
}
また、時々によって返されるマップはsomeMapFunction
不変のマップであるので、これは使用した場所で行うことはできませんMap.replaceAll
。私はきれいだっストリームの解決策を考え出すことができませんでした。
彼らは次のとおりでした:
私の最初の本能は示唆していたStream
入力のMap
さんentrySet
と新しい値と終了に値をマッピングしますcollectors.toMap()
。
残念ながら、Collectors.toMap
スローNullPointerException
時に値マッパー関数を返しますnull
。したがって、それは動作しませんnull
あなたの入力の値Map
。
あなたの入力を変異させることができないので、別の方法として、Map
私はあなたがそれのコピーを作成して呼び出すことを示唆していますreplaceAll
:
Map<String, Double> adjustedMap = new HashMap<>(someMap);
adjustedMap.replaceAll ((k,v) -> v != null ? 2*v : null);