怎么在java中使用map,完成key没有就新增,有的话就计算一个新的值 的功能

在Java中,Map是一个非常常用的数据结构,用于存储键值对。你可以使用HashMap,TreeMap,或LinkedHashMap等实现来满足不同的需求。如果你的目标是检查某个键是否存在于映射中,然后根据存在情况新增或更新对应的值,有几种实现方式可供选择。

这里有几个常见的场景:

如果键不存在,则新增。如果存在,则根据旧值计算新值。

Java 8 引入了一些新的方法,使这种操作更简单和优雅。以下是几种常见方式:

方法一:使用 putIfAbsent 和 replace

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        
        String key = "example";
        int newValue = 42;
        
        // 使用 putIfAbsent 初始化不存在的键
        map.putIfAbsent(key, newValue);
        
        // 如果键存在,计算新值并更新
        if (map.containsKey(key)) {
            map.replace(key, map.get(key) + newValue);
        }
        
        System.out.println(map);
    }
}

方法二(推荐):使用 merge
merge 方法允许你在键已经存在的情况下对旧值和新值进行计算后更新值。

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        
        String key = "example";
        int newValue = 42;
        
        // 使用 merge 方法,如果键存在则计算新值并更新,否则新增键值对
        map.merge(key, newValue, Integer::sum);
        
        System.out.println(map);
    }
}

在这个例子中,Integer::sum是一个方法引用,等同于一个Lambda表达式 (oldValue, value) -> oldValue + value。这个方法引用满足merge方法的要求:接收旧值和新值,并返回一个计算出的新值。

方法三:使用 compute 或 computeIfPresent
compute 方法允许你对键存在或者不存在的情况进行处理。computeIfPresent 则只在键存在时更新值:

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();

        String key = "example";
        int newValue = 42;

        // 使用 compute 来处理键的存在与否
        map.compute(key, (k, v) -> (v == null) ? newValue : v + newValue);

        System.out.println(map);
    }
}

在这个例子中,如果键key不存在,v会是null,因此返回newValue。如果键存在,则v是键对应的值,计算并返回一个新的值。

总结
这些方法都可以帮助你在Java中使用Map来根据键的存在与否进行添加或更新值。其中,Java 8 引入的merge和compute方法尤为简洁和直观,适用于许多常见场景。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值