Java语法HashMap集合computeIfAbsent()方法使用

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

import java.util.*;


public class TestComputeIfAbsent {
    public static void main(String[] args) {
        // 数据准备 HashMap中 键是String类型,值是Set集合,Set中存放了String类型元素
        HashMap<String, Set<String>> map = new HashMap<>();
        Set<String> set = new HashSet<>();
        set.add("张三");
        set.add("王五");
        map.put("China", set);

        System.out.println(map);

        // 判断集合键中有无France, 有则添加李四;没有则添加键France,及对应值李四
        if (map.containsKey("France")) {
            // 若存在China,则向键对应的值中添加李四
            map.get("France").add("李四");
        } else {
            // 若不存在China
            Set<String> tempset = new HashSet<>();
            tempset.add("李四");
            map.put("France", tempset);
        }
    }
}

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

import java.util.*;


public class TestComputeIfAbsent {
    public static void main(String[] args) {
        // 数据准备 HashMap中 键是String类型,值是Set集合,Set中存放了String类型元素
        HashMap<String, Set<String>> map = new HashMap<>();
        Set<String> set = new HashSet<>();
        set.add("张三");
        set.add("王五");
        map.put("China", set);

        System.out.println(map);

        map.computeIfAbsent("France", k -> new HashSet<>()).add("李四");
        System.out.println(map);
    }
}

map.computeIfAbsent("France", k -> new HashSet<>()).add("李四");的意思表示key为“France”的建值对是否存在,如果存在则获取France的值,并操作值的set添加数据“lisi"。若不存在,在将键和值创建并put到map中。

你可能感兴趣的:(java,开发语言)