今天试试Java8 Map集合put() compute()getOrDefault()新方法

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

一、put()与putIfAbsent()

1、put方法:返回旧值,如果没有则返回null

V put(K key, V value);

2、putIfAbsent方法:putIfAbsent返回旧值,如果没有则返回null; 先计算value,再判断key是否存在

V putIfAbsent(K key, V value);

3、区别:

<1.使用put方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则会覆盖旧值,value为新的值。

<2.使用putIfAbsent方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则依旧为原来的值。

二、compute()和computeIfAbsent()

1、compute方法

V compute(K key, BiFunction remappingFunction)

相当于put方法,不过返回的是新值。当key不存在时,执行value计算方法,计算value

map.compute("MGJJ", (k, v) -> {
    if (v == null) {
        v = 1;
    } else {
        v += 1;
    }
    return v;
});

2、computeIfAbsent()

V computeIfAbsent(K, Function<? super K, ? extends V>)

computeIfAbsent:存在时返回存在的值,不存在时返回新值; 参数为:key, value计算方法: 当key不存在时,执行value计算方法,计算value值

map.computeIfAbsent("newPen", k -> 600);

image.png

三、computeIfPresent()和computeIfAbsent()

对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。

computeIfPresent() 方法的语法为:

map.computeIfPresent(K key, BiFunction remappingFunction)

参数说明

  • key - 键
  • remappingFunction - 重新映射函数,用于重新计算值

返回值

如果 key 对应的 value 不存在,则返回该 null(可能发送空指针异常);如果存在,则返回通过 remappingFunction 重新计算后的值。

区别:

map.computeIfAbsent() 就是只有当value不存在时候,才会运行function方法,return值为put的值。 map.computeIfPresent() 就是只有当value存在时候,才会运行function方法,return值为put的值。

四、getOrDefault()

V getOrDefault(Object, V)

这个方法同样检查 Map 中的 Key,如果发现 Key 不存在或者对应的值是 null,则返回第二个参数即默认值。要注意,这个默认值不会放入 Map。所以如果你这样写:

Map<String, List<String>> map = new HashMap<>();
map.getOrDefault("codedq", new ArrayList<>()).add("业余草");

执行完之后 map 仍然是空的!

猜你喜欢

转载自juejin.im/post/7126168504406900773
今日推荐