美文网首页
【JAVA8新特性】- Map中的computeIfAbsent

【JAVA8新特性】- Map中的computeIfAbsent

作者: lconcise | 来源:发表于2020-07-13 09:06 被阅读0次

    Map中的computeIfAbsent方法是方法更简洁。

    在JAVA8的Map接口中,增加了一个方法computeIfAbsent,此方法签名如下:

    public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)

    此方法首先判断缓存MAP中是否存在指定key的值,如果不存在,会自动调用mappingFunction(key)计算key的value,然后将key = value放入到Map。
    如果mappingFunction(key)返回的值为null或抛出异常,则不会有记录存入map

    Example01

            Map<String, String> map = new HashMap<>();
    
            // 原来的方法
            if (!map.containsKey("huawei")) {
                map.put("huawei", "huawei" + "华为");
            }
    
            // 同上面方法效果一样,但更简洁
            map.computeIfAbsent("huawei", k -> k + "华为");
    
            System.out.println(map);
    

    Example02

            Map<String, AtomicInteger> map2 = new HashMap<>();
            // 统计字段出现个数
            List<String> list = Lists.newArrayList("h", "e", "l", "l", "o", "w", "o", "r", "l", "d");
            for (String str : list) {
                map2.computeIfAbsent(str, k -> new AtomicInteger()).getAndIncrement();
            }
            // 遍历
            map2.forEach((k, v) -> System.out.println(k + " " + v));
    

    Example03

            Map<String, List<String>> map3 = new HashMap<>();
    
            // 如果key不存在,则创建新list并放入数据;key存在,则直接往list放入数据
            map3.computeIfAbsent("ProgrammingLanguage", k -> new ArrayList<>()).add("Java");
            map3.computeIfAbsent("ProgrammingLanguage", k -> new ArrayList<>()).add("Python");
            map3.computeIfAbsent("ProgrammingLanguage", k -> new ArrayList<>()).add("C#");
            map3.computeIfAbsent("Database", k -> new ArrayList<>()).add("Mysql");
            map3.computeIfAbsent("Database", k -> new ArrayList<>()).add("Oracle");
    
            // 遍历
            map3.forEach((k, v) -> System.out.println(k + " " + v));
    

    相关文章

      网友评论

          本文标题:【JAVA8新特性】- Map中的computeIfAbsent

          本文链接:https://www.haomeiwen.com/subject/qynpcktx.html