前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

compute

作者头像
阿超
发布2022-08-17 20:36:06
3790
发布2022-08-17 20:36:06
举报
文章被收录于专栏:快乐阿超快乐阿超

破产是一种暂时的困境,贫困是一种思想的状态。——比尔·盖茨

今天在Map中看到了这样一个函数:compute

于是做了点测验

代码语言:javascript
复制
Map<String, String> map = MapUtil.newHashMap();
map.put("123", "456");
map.put("789", "123");
System.out.println("如果存在就执行,并将结果作为value放入map");
map.computeIfPresent("1234", (k, v) -> v + "1 ");
// {123=456, 789=123} 说明未找到指定的key时无更改
System.out.println(map);
map.computeIfPresent("123", (k, v) -> v + "2 ");
// {123=4562 , 789=123} 说明如果找到了对应的key,将value更改为后面的结果
System.out.println(map);
map.computeIfPresent("123", (k, v) -> null);
// {789=123} 说明如果找到对应的key,并且后方传入Function内部apply返回值为null,则移除对应的key
System.out.println(map);
map.computeIfPresent("1234", (k, v) -> null);
// {789=123} 说明如果未找到对应的key,并且后方传入Function内部apply返回值为null,不会更改map
System.out.println(map);
System.out.println("如果缺省就执行,将key作为后方Function的参数,将结果作为value放入map");
map.computeIfAbsent("789", v -> v + "3 ");
// {789=123} 和上方一样,如果key存在,则无变化
System.out.println(map);
map.computeIfAbsent("123", k -> k + "4 ");
// {123=1234 , 789=123} 说明如果key不存在,则将key作为参数,执行后方逻辑返回值再作为value,放入map
System.out.println(map);
map.computeIfAbsent("1234", k -> null);
// {123=1234 , 789=123} 和上方一样,说明即便key不存在,后方函数返回值为null,不会更改map
System.out.println(map);
map.computeIfAbsent("123", k -> null);
// {123=1234 , 789=123} 和上方一样,说明即便key存在,后方函数返回值为null,不会更改map
System.out.println(map);
System.out.println("执行后方逻辑,并将结果作为value放入map");
map.compute("123", (k, v) -> v + "5 ");
// {123=1234 5 , 789=123} 说明如果key存在,执行后方逻辑返回值作为value,放入map
System.out.println(map);
map.compute("1234", (k, v) -> v + "6 ");
// {123=1234 5 , 1234=null6 , 789=123} 说明如果key不存在,执行后方逻辑返回值作为value,放入map,注意此处lambda内部的value为null
System.out.println(map);
map.compute("123", (k, v) -> null);
// {1234=null6 , 789=123} 说明如果key存在,后方函数返回值为null,则会移除对应的key
System.out.println(map);
map.compute("12345", (k, v) -> null);
// {1234=null6 , 789=123} 说明如果key不存在,后方函数返回值为null时,不会更改map
System.out.println(map);

现在基本理解了computecomputeIfPresentcomputeIfAbsent的使用了:

以下方法放入map时的key均为方法第一个参数

compute

返回值状态

未找到指定的key时

找到指定的key时

后方传入lambda返回值不为null

执行后方逻辑返回值作为value,放入map,注意此处lambda内部参数的value为null

执行后方逻辑返回值作为value,放入map

后方传入lambda返回值为null

不会更改map

移除对应的key

computeIfPresent

返回值状态

未找到指定的key时

找到指定的key时

后方传入lambda返回值不为null

不会更改map

执行后方逻辑返回值作为value,放入map

后方传入lambda返回值为null

不会更改map

移除对应的key

computeIfAbsent

返回值状态

未找到指定的key时

找到指定的key时

后方传入lambda返回值不为null

则将key作为参数,执行后方逻辑返回值再作为value,放入map

不会更改map

后方传入lambda返回值为null

不会更改map

不会更改map

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

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

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

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

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