如果不存在,则将新值放入 Map 中,或者如果存在,则将其添加到 Map 中

2022-09-03 03:40:04

我有一个键类型类。让我们调用映射的实例。java.util.Map<Foo, Double>Foomap

我想将 {, } ( 是 的实例 , 和 ) 添加到该映射中。但是,如果键已经存在,我想对该映射中的当前值求和。fooffooFoofDoublefoof

目前我使用

Double current = map.get(foo);
f += current == null ? 0.0 : current;
map.put(foo, f);

但是,在 Java 8 中是否有一种时髦的方法可以做到这一点,例如使用 和 ?Map#mergeDouble::sum

遗憾的是,我无法弄清楚。

谢谢。


答案 1

这就是地图上的合并函数的用途。

map.merge(foo, f, (f1, f2) -> f1 + f2)

这可以进一步减少到

map.merge(foo, f, Double::sum)

它基本上相当于

if(map.contains(foo)){
    double x = map.get(foo);
    map.put(foo, x + f)
} else {
    map.put(foo, f)      
}

答案 2

您可以执行以下操作:

map.put(foo, f + map.getOrDefault(foo, 0d));

此处的值将是与 (否则) 中是否存在的值相对应的值。fooMap0d


推荐