【Java 8 新特性】Java Map compute() 示例 | 指定 key 的值进行计算后替换
Java Map compute 示例 | 指定 key 的值进行计算后替换
- 例1
- 例2
- 例3
- 例4
- 参考文献
compute
是java.util.Map
的默认方法,已在Java8中引入。
compute
方法尝试计算指定键及其当前映射值的映射。
从Java
文档中查找方法声明。
default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
key
是要关联指定值的键。
remappingFunction
是计算该值的重映射函数。
compute
方法返回与指定键关联的新值,如果没有,则返回null
。
compute
方法的工作原理如下。
1. 如果指定键的旧值和重新映射函数计算的新值都不为null
,则在这种情况下,旧值将替换为新值。
2. 如果指定键的旧值不为null
,但通过重新映射函数计算的新值为null
,则在这种情况下,将删除指定键的条目。
3. 如果指定键的旧值为null
,但重新映射函数计算的新值不为null
,则在这种情况下,旧值将替换为新值。
4. 如果指定键的旧值为null
,并且通过重新映射函数计算的新值也为null
,则在这种情况下,将删除指定键的条目。
例1
旧值不为空。
新值也不为空。
在这种情况下,旧值将被新值替换。
Compute1.java
import java.util.HashMap;
import java.util.Map;public class Compute1 {public static void main(String[] args) {Map<Integer, String> studentMap = new HashMap<>();studentMap.put(101, "Mahesh");studentMap.put(102, "Suresh");String newValue = studentMap.compute(101, (k, v) -> v + "-" + k);System.out.println(newValue);System.out.println(studentMap);}
}
输出
Mahesh-101
{101=Mahesh-101, 102=Suresh}
不使用compute
方法也可以实现同样的效果,如下所示。
Compute11.java
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;public class Compute11 {public static void main(String[] args) {Map<Integer, String> studentMap = new HashMap<>();studentMap.put(101, "Mahesh");studentMap.put(102, "Suresh");BiFunction<Integer, String, String> remappingFunction = (k, v) -> v + "-" + k;int key = 101;String oldValue = studentMap.get(key);String newValue = remappingFunction.apply(key, oldValue);if (oldValue != null) {if (newValue != null)studentMap.put(key, newValue);elsestudentMap.remove(key);} else {if (newValue != null)studentMap.put(key, newValue);elsestudentMap.remove(key);}System.out.println(newValue);System.out.println(studentMap);}
}
输出
Mahesh-101
{101=Mahesh-101, 102=Suresh}
例2
旧值不为空。
新值为空。
在这种情况下,指定key
的条目将被删除。
Compute2.java
import java.util.HashMap;
import java.util.Map;public class Compute2 {public static void main(String[] args) {Map<Integer, String> studentMap = new HashMap<>();studentMap.put(101, "Mahesh");studentMap.put(102, "Suresh");studentMap.compute(102, (k, v) -> null);System.out.println(studentMap);}
}
输出
{101=Mahesh}
例3
旧值为空。
新值不为空。
在这种情况下,旧值将被新值替换。
Compute3.java
import java.util.HashMap;
import java.util.Map;public class Compute3 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("Bharat", "Modi");map.put("Russia", null);map.compute("Bharat", (k, v) -> "Mr. ".concat(v));map.compute("Russia", (k, v) -> v == null ? "Mr. Putin" : "Mr. ".concat(v));System.out.println(map);}
}
输出
{Bharat=Mr. Modi, Russia=Mr. Putin}
例4
旧值为空。
新值也为空。
在这种情况下,指定密钥的条目将被删除。
Compute4.java
import java.util.HashMap;
import java.util.Map;public class Compute4 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("Bharat", "Modi");map.put("Russia", null);map.compute("Russia", (k, v) -> null);System.out.println(map);}
}
输出
{Bharat=Modi}
参考文献
【1】Java doc: Map
【2】Java Map compute() Example
【Java 8 新特性】Java Map compute() 示例 | 指定 key 的值进行计算后替换相关推荐
- Java - JDK8新特性,代码demo示例;
哈哈哈哈大魔都下雪啦,敲段代码暖和暖和,嘿嘿 public class jdk8Test {@Testpublic void LambdaNew() {//before jdk8List<Str ...
- Java 8 新特性 宋红康跟学
Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...
- Java 10新特性
Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...
- java自动化测试语言高级之Java 9 新特性
java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 2 ...
- 七、Java 14 新特性
七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...
- java自动化测试语言高级之Java 8 新特性
java自动化测试语言高级之Java 8 新特性 文章目录 java自动化测试语言高级之Java 8 新特性 Java 8 新特性 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 ...
- Java 9 新特性概述
转载自 Java 9 新特性概述 Java 9 正式发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化.其中最重要的改动是 ...
- Java 8 新特性——实践篇
Lambda 表达式 Lambda 表达式引入之前: 举个场景例子:当我们要对一个班级里的学生对象里各种成绩进行过滤时,比如大于85分获得A的学生集合,最初的方式是写不同的方法处理不同的科目成绩过滤: ...
- Java 8 新特性,Optional介绍 | 春松客服
目录 缘起 Optional类 Optional对象构造方法 提取Optional对象的值 使用orElse()方法获取值 使用filter()方法过滤 示例程序 注意事项 使用场景 orElseGe ...
- Java 16 新特性介绍
本文要点 Java 16 和即将发布的 Java 17 引入了大量特性和语言增强,有助于提高开发人员的生产力和应用程序性能 Java 16 Stream API 为常用的终端操作提供了很多新方法,有助 ...
最新文章
- 从0设计一个基于Redis的锁服务
- android c#websocket传送图片
- mysql sql优化_MySQL数据库SQL语句优化原理专题(三)
- Linux 0.11 实验环境搭建与调试
- Spring Boot2.0 JPA 实现分页(简单查询分页、复杂查询分页)
- JS前端常用工具方法
- 哪吒汽车宣布获得上海银行总行20亿元综合授信额度
- Unity直接导出Android Apk包环境配置
- Vmlogin防关联超级浏览器Selenium浏览器自动化详细教程
- BIT_陆小果的一元多项式
- 空间中直线与直线之间的位置关系
- 一分钟建立自己单位的故障报修平台
- 快圣诞节了,用Python 送你一棵圣诞树
- DBeaver mySQL 远程操作数据库
- PPT中图表不同粘贴方式的区别
- UI设计师为什么要学习字体设计?
- python绘制曲线、散点图
- 位运算实现加减乘除四则运算
- 非常全面的支付宝钱包系统架构图解
- ZEGO即构科技荣获36氪【WISE2020中国新经济之王最具影响力企业】
热门文章
- 【C补充】指向指针或函数的指针
- python日历程序编写_Python创建日历实例
- 关于零信任的 “灵魂” 12问,企业未来如何适配“零信任”?
- 发现了个神奇的图片压缩工具
- 【树形dp 题解】 洛谷P3174 毛毛虫
- 如何批量将 Xlsx 格式的 Excel 文档转为 Xls 格式
- word自带公式编辑_如何在word中调整公式大小
- 在虚拟机安装Win7出现:directory ezboot not found error loading image:CDMENU.EZB
- 面试被问到你的优点和缺点时,该如何完美的回答
- 颜色及图片识别原理,颜色识别传感器介绍