Java HashMap computeIfAbsent() ,key对应的value不存在时重新计算

提出问题

定义 HashMap 对象,并将 姓 作为key,姓名 作为value,放入到 HashMap 中

分析:考虑到同姓的人有很多,所以 value 是 List 类型。当放入 李雷 时,需要先判断是否存在 key 是 李的数据,分下面两种情况:

  • 如果存在,就要取出 对应的 value(List) 类型,然后将 李雷 放入到 List 中。

  • 如果不存在,就需要创建 ArrayList ,然后将 李雷 放入到 List 中,并将 List 放入到 Map 中

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

    public void put(String name){
        String xing = name.substring(0,1);
        List<String> list = map.get(xing);
        if(list==null){
            list = new ArrayList();
            map.put(xing,list)
        }
        list.add(name);
    }
}

缺点

在 put() 方法中,需要取出 姓 对应的 value,该 value 是 List 类型,然后判断 List 是否为 null,如果为 null,需要先创建,然后再添加 姓名,代码写起来有点啰嗦

解决

使用 hashmap.computeIfAbsent() 方法

介绍

如果 key 对应的 value 不存在,则执行 remappingFunction 方法,该方法返回 新value,并将该 新value 放入 HashMap中,否则返回 value。

语法

hashmap.computeIfAbsent(K key, Function remappingFunction)
参数说明:
  • key - 键
  • remappingFunction - 重新映射函数,用于重新计算值

重写上面代码

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

    public void put(String name){
        String xing = name.substring(0,1);
        List<V> list = this.targetMap.computeIfAbsent(key, k -> new ArrayList<>());
        list.add(name);
    }
}

原文出处:/show_1GWB2pm2udn.html