Javaでのマップの値を乗算するクリーン(ヌル安全な)方法はありますか?

ウマル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);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=37917&siteId=1