Map中的merge()方法你还不知道吗?

merge()

源码:

default V merge(K key, V value,
        BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
    // 非空校验
    Objects.requireNonNull(remappingFunction);
    Objects.requireNonNull(value);
    // 核心代码!
    V oldValue = get(key);
    V newValue = (oldValue == null) ? value :
               remappingFunction.apply(oldValue, value);	
    if (newValue == null) {
        remove(key);
    } else {
        put(key, newValue);
    }
    return newValue;
}

merge() 适用于两种情况:

  • 如果 key 不存在,它就等价于 put(key, value) 。
  • 如果 key 已经存在,我们 remappingFunction 可以选择合并的方式。

如果目前我想要把键为 i 的值进行 +1 操作,如果当前键不存在,则初始化值为 1 。如何实现呢?

假定 map 为 HashMap 的实例对象。

map.merge(i, 1, (old, new) -> old + new);  // map.get(i)++

解释:

  • map: 这是一个Map接口的实例,可以是HashMapTreeMap等具体实现之一。
  • i: 这是要待查找或添加的键。
  • 1: 这是与键i关联的值,如果键i尚不存在于哈希表中,则将此值作为初始值插入。
  • (o1, o2) -> o1 + o2: 这是一个Lambda表达式,实现了BiFunction<? super V, ? super V, ? extends V>接口。这里,V是哈希表泛型的类型。Lambda表达式接收两个参数:old(当前哈希表中键i的值,如果键不存在则为null)和new(要合并的值,在这个例子中是1)。表达式的结果是将这两个值相加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值