前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 8 中的 java.util.Map#computeIfAbsent

Java 8 中的 java.util.Map#computeIfAbsent

作者头像
一个会写诗的程序员
发布2021-03-18 11:21:58
6820
发布2021-03-18 11:21:58
举报

Java8之前,从map中根据key获取value操作可能会有下面的操作

Object key = map.get("key");

if (key == null) {

key = new Object();

map.put("key", key);

}

Java8之后,上面的操作可以简化为一行,若key对应的value为空,会将第二个参数的返回值存入并返回。

computeIfAbsent() 方法签名如下:

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

首先,判断此 map 中是否存在指定 key 的值 v = get(key):

如果存在(v != null),那就直接返回这个 v ( return v );

如果不存在( v == null),会调用 mappingFunction(key)计算key的value,然后将key = value放入到Map。

如果mappingFunction(key)返回的值为null或抛出异常,则不会有记录存入map。


另外,如果v已经计算好了,那么适合使用putIfAbsent(k, v),如果v还未计算,同时计算需要一些耗时,那么建议使用computeIfAbsent,将获取v值的计算放到lambada表达式体内,这样只有再map不含有k对应值时才会进行获取v值的计算,可以优化性能,代码示例:

public class MapInfo {

public static void computeIfAbsent(){ // jdk1.8新特性哦

HashMap<String> map = new HashMap&lt;>();

map.put("1","is map");

map.put("2","contains a mapping");

map.put("3","specified");

map.put("4","inappropriate");

map.computeIfAbsent("5", MapInfo::apply);

System.out.println(map.get("5"));

}

private static Object apply(String v) {

return v = "is 5";

}

}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档