Map 的 computeIfAbsent举例

Map 的 computeIfAbsent方法使用

假设我们定义下面一个 Map:

Map<String, List<String>> map = new HashMap<>();

如果我们要放一个元素进去,很多人会这么写:

List<String> list = map.get("list1");
if (list == null) {
  list = new ArrayList<>();
  map.put("list1", list);
}
list.add("A");

分析一下,从第一行到第五行,从map集合中获取一个集合对象,比如上面例子的List<String>
如果集合对象为空,这时是添加不了元素的。但是集合对象也就是list已经声明,所以,我们分配一块空间,指向list 就可以添加往集合对象添加元素了(就是new一个ArrayList)。

实际上从 Java 8 开始,Map 提供了 computeIfAbsent() 方法,我们可以写成一行即可:

map.computeIfAbsent("list1", k -> new ArrayList<>()).add("A");

例子2

JDK1.8以前的写法


   if (successors.containsKey(currentWord)) {
       successors.get(currentWord).add(nextWord);
   } else {
       Set<String> newSet = new HashSet<>();
       newSet.add(nextWord);
       successors.put(currentWord, newSet);
   }

JDK1.8的写法

    successors.computeIfAbsent(currentWord, a -> new HashSet<>());
    successors.get(currentWord).add(nextWord);

总结

可以看得出来,可以Map的Value是集合的话,可以使用JDK1.8的简洁写法,当然,这不是说以前的写法不好。两种方法都可以使用。
java8 使用Map中的computeIfAbsent方法构建本地缓存,提高程序效率
How do I use the new computeIfAbsent function?
Map 的 computeIfAbsent等三个方法的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值