computeIfAbsent() 的使用

 编程中经常遇到这种数据结构,判断一个map中是否存在这个key,如果存在则处理value的数据,如果不存在,则创建一个满足value要求的数据结构放到value中。以前常用的方法如下:

public class TestComputeIfAbsent {
  static HashMap<String, Set<String>> hashMap = new HashMap<>();
  public static void main(String[] args) {
    Set<String> set = new HashSet<>();
    set.add("zhangSan");
    hashMap.put("china", set);
    // 判断map中是否存在,如果存在则添加元素到set中,如果不存在则新建set添加到hashMap中
    if(hashMap.containsKey("china")) {
      hashMap.get("china").add("liSi");
    } else {
      Set<String> setTmp = new HashSet<>();
      setTmp.add("liSi");
      hashMap.put("china", setTmp);
    }
    System.out.println(hashMap.toString());
  }
}

官方非常的贴心,为了满足广大用户的要求,加入了computeIfAbsent() 这个api,使用后以上代码变成了下面的形式:

public class TestComputeIfAbsent {
  static HashMap<String, Set<String>> hashMap = new HashMap<>();
  public static void main(String[] args) {
    Set<String> set = new HashSet<>();
    set.add("zhangSan");
    hashMap.put("china", set);
    // after JDK1.8
    hashMap.computeIfAbsent("china", key -> getValues(key)).add("liSi");
    System.out.println(hashMap.toString());
  }

  public static HashSet getValues(String key) {
    return new HashSet();
  }
}

hashMap.computeIfAbsent("china", key -> getValues(key)).add("liSi");的意思表示key为“China”的建值对是否存在,返回的是value的值。

如果存在则获取china的值,并操作值的set添加数据“lisi"。

如果不存在,则调用方法,新创建set结构,将"lisi"添加到set中,再存入到hashMap中。

  • 64
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
`computeIfAbsent()` 是一个 Java 8 新增的方法,用于在 `Map` 中根据 Key 获取 Value,如果 Value 不存在,则可以通过提供的计算函数进行计算并将计算结果存储到 Map 中。该方法的使用示例如下: ```java Map<String, Integer> map = new HashMap<>(); map.computeIfAbsent("A", k -> 1); map.computeIfAbsent("B", k -> 2); map.computeIfAbsent("C", k -> 3); System.out.println(map.get("A")); // 1 System.out.println(map.get("B")); // 2 System.out.println(map.get("C")); // 3 System.out.println(map.get("D")); // null ``` 上述示例中,首先创建了一个空的 HashMap 对象 `map`,然后通过 `computeIfAbsent()` 方法将 Key-Value 存储到 Map 中。其中,计算函数通过 Lambda 表达式实现,如果指定 Key 对应的 Value 已经存在,则不会进行计算,只会返回已有的 Value 值。最后,通过 `get()` 方法获取指定 Key 对应的 Value 值。 需要注意的是,`computeIfAbsent()` 方法仅在 Value 不存在时才会进行计算,如果 Value 已经存在,则不会进行任何操作。此外,在计算函数中也可以根据 Key 和已有的 Value 进行计算,例如: ```java Map<String, Integer> map = new HashMap<>(); map.computeIfAbsent("A", k -> 1); map.computeIfAbsent("B", k -> k.length()); System.out.println(map.get("A")); // 1 System.out.println(map.get("B")); // 1 ``` 上述示例中,计算函数中使用了 Key 和已有的 Value 进行计算,如果 Value 已经存在,则使用已有的 Value 进行计算。因此,对于 Key "B",计算函数返回值为 `1`,而不是 `2`。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做一个offer收割机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值