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); 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); 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中。