computeIfAbsent方法

computeIfAbsent()

是HashMap中的方法,用于指定key的值进行重新计算,如果不存在key则添加到hashMap中,如果存在则返回key所对应的value。

在我们写程序时,经常会遇到,判断一个map中是否存在这个key,如果存在则处理value。如果不存在,则创建一个满足value要求的数据结构放入到value中。

之前常用的做法是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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方法取代上面的代码,具体写法为:

1
2
3
4
5
6
7
8
9
10
11
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 -> new HashSet()).add("liSi");
System.out.println(hashMap.toString());
}
}

下面这句:

1
hashMap.computeIfAbsent("china", key -> new HashSet()).add("liSi");

的意思是键为china的键是否存在,如果存在则返回value,否则新创建一个hashSet,之后添加lisi到set中。


computeIfAbsent方法
http://example.com/2023/04/10/computeIfAbsent方法/
作者
zlw
发布于
2023年4月10日
许可协议