compute

简介: compute

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

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

于是做了点测验

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内部参数的valuenull 执行后方逻辑返回值作为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
相关文章
Layui 内置方法 - layer.close(关闭特定层)
Layui 内置方法 - layer.close(关闭特定层)
717 0
|
druid 关系型数据库 MySQL
【数据库】数据库连接池配置 testOnBorrow
【数据库】数据库连接池配置 testOnBorrow
1219 0
|
存储 Java Linux
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
2830 0
Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
|
NoSQL Java Redis
服务端如何防止订单重复支付!
如图是一个简化的下单流程,首先是提交订单,然后是支付。 支付的话,一般是走支付网关(支付中心),然后支付中心与第三方支付渠道(微信、支付宝、银联)交互。 支付成功以后,异步通知支付中心,支付中心更新自身支付订单状态,再通知业务应用,各业务再更新各自订单状态。
服务端如何防止订单重复支付!
|
消息中间件 SQL RocketMQ
【RocketMQ系列五】消息示例-顺序消息&延迟消息&广播消息的实现
【RocketMQ系列五】消息示例-顺序消息&延迟消息&广播消息的实现
700 1
|
小程序 Java 应用服务中间件
Spring Boot如何配置SSL实现同时支持http和https协议(超简单)
Spring Boot如何配置SSL实现同时支持http和https协议(超简单)
1578 0
|
关系型数据库 MySQL 数据库
MySQL服务器端安装教程
MySQL服务器端安装教程
|
缓存 关系型数据库 MySQL
MYSQL数据优化常用配置参数
MYSQL数据优化常用配置参数
503 0
下一篇
开通oss服务