Map中compute、putIfAbsent、computeIfAbsent、merge、computeIfPresent使用

目录

putIfAbsent

computeIfAbsent

computeIfPresent

compute

merge


putIfAbsent

解释:【不存在则添加】,如果map中没有该key,则直接添加;如果map中已经存在该key,则value保持不变

 default V putIfAbsent(K key, V value) {//  根据key获取valueV v = get(key);// 如果value == null  则将新的value赋值给key 然后返回新的value// 否则返回历史valueif (v == null) {v = put(key, value);}return v;}
 Map<String,Integer> map1 = new HashMap<>();map1.put("a",1);map1.putIfAbsent("a",2);map1.forEach((k,v)->{System.out.println(k+"->"+v);});输出结果为1Map<String,Integer> map1 = new HashMap<>();//map1.put("a",1);map1.putIfAbsent("a",2);map1.forEach((k,v)->{System.out.println(k+"->"+v);});
输出结果为2

computeIfAbsent

解释:【不存在则计算】,如果map中没有该key,则会计算出一个符合value类型的值赋给value;如果map中已经存在该key,则value保持不变;由于它是Funcation函数接口,因此只能处理一个参数

image.png

public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("a",1);map.computeIfAbsent("c",(k)->2);map.forEach((k,v)->{System.out.println(k+"-->"+v);});}
输出结果为:
a-->1
c-->2

computeIfPresent

解释:【存在则计算】,如果map中没有该key,则该键值对不会添加到map中;如果map中已经存在该key,则会把计算出的值覆盖原来的value;由于它是BiFuncation函数接口,因此能处理两个参数

image.png

image.png

public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("a", 1);map.computeIfPresent("a", (oldK, oldV) -> {return oldV+1;});map.forEach((k, v) -> {System.out.println(k + "-->" + v);});}
输出结果为:
a-->2public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("a", 1);map.computeIfPresent("b", (oldK, oldV) -> {return oldV+1;});map.forEach((k, v) -> {System.out.println(k + "-->" + v);});}
输出结果为:
a-->1

compute

解释:【计算】,如果map中没有该key,则会计算出一个符合value类型的值赋给value;如果map中已经存在该key,则会把计算出的值覆盖原来的value.可以当成是computeIfAbsent与computeIfPresent的结合体;由于它是BiFuncation函数接口,因此能处理两个参数

 public static void main(String[] args) {// 存在一个需求 如果map中存在key则将原来key的值进行+10// 如果map中不存在key 则将此值赋值为1Map<String, Integer> map = new HashMap<>();map.put("a", 1);if (map.containsKey("b")) {map.put("b", map.get("b") + 10);} else {map.put("b", 1);}map.forEach((k, v) -> {System.out.println(k + "-->" + v);});}
输出结果:
a-->1
b-->1// 使用computeIfPresent + computeIfAbsentpublic static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("a", 1);map.computeIfPresent("b",(k,v)->v+10);map.computeIfAbsent("b",(k)->1);
//        if (map.containsKey("b")) {
//            map.put("b", map.get("b") + 10);
//        } else {
//            map.put("b", 1);
//        }map.forEach((k, v) -> {System.out.println(k + "-->" + v);});}
输出结果:
a-->1
b-->1// 使用compute优化public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("a", 1);
//        if (map.containsKey("b")) {
//            map.put("b", map.get("b") + 10);
//        } else {
//            map.put("b", 1);
//        }map.compute("b", (oldK, oldV) -> oldV == null ? 1 : oldV + 10);map.forEach((k, v) -> {System.out.println(k + "-->" + v);});}
输出结果:
a-->1
b-->1

merge

merge(key, value, remappingFunction)

解释:【合并】如果 key 对应的 value 不存在,则返回该 value 值,如果存在,则返回通过 remappingFunction 重新计算后的值

image.png

public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("a", 1);
//        if (map.containsKey("b")) {
//            map.put("b", map.get("b") + 10);
//        } else {
//            map.put("b", 1);
//        }map.merge("b",1, Integer::sum);map.forEach((k, v) -> {System.out.println(k + "-->" + v);});}
输出结果:
a-->1
b-->1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/63267.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件属性与权限管理(可读、可写、可执行)

Linux把所有文件和设备都当作文件来管理&#xff0c;这些文件都在根目录下&#xff0c;同时Linux中的文件名区分大小写。 一、文件属性 使用ls -l命令查看文件详情&#xff1a; 1、每行代表一个文件&#xff0c;每行的第一个字符代表文件类型&#xff0c;linux文件类型包括&am…

百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5

4月官宣创业&#xff0c;6月15日发布第一款7B开源模型&#xff0c;7月11日发布第二款13B、130亿参数开源模型。 平均保持2个月一个版本发布速度&#xff0c;8月8日&#xff0c;百川智能发布了创业以来的首个530亿参数闭源大模型——Baichuan-53B&#xff08;以下简称“53B”&a…

企业产品手册5大核心功能,附产品手册在线制作工具Baklib

企业产品手册的5大核心功能 企业产品手册是企业向用户传达产品信息、功能和使用方法的重要工具。下面将介绍企业产品手册的五个核心功能。 1. 产品介绍和特点展示 产品手册的首要功能是介绍和展示企业的产品。它应该提供清晰、详细的产品信息&#xff0c;包括产品的特点、优势…

5G用户逼近7亿,5G发展迈入下半场!

尽管普遍认为5G投资高峰期正在过去&#xff0c;但是从2023年上半年的情况来看&#xff0c;我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上&#xff0c;工信部人士透露&#xff0c;截至今年6月底&#xff0c;我国5G基站累计达到293.7万个&…

InVEST模型使用

第一天&#xff1a; 1. 生态系统服务理论联系实践案例讲解 2. InVEST模型的开发历程、不同版本的差异及对数据需求的讲解 3. InVEST所需数据的要求&#xff08;分辨率、格式、投影系统等&#xff09;、获取及标准化预处理讲解 4. InVEST运行常见问题及处理解决方法讲解 5.…

新疆大学841软件工程考研

1&#xff0e;软件生产的发展经历了三个阶段&#xff0c;分别是____、程序系统时代和软件工程时代时代。 2&#xff0e;可行性研究从以下三个方面研究每种解决方法的可行性&#xff1a;经济可行性、社会可行性和_____。 3&#xff0e;HIPO图的H图用于描述软件的层次关系&…

uniapp 小兔鲜儿 - 首页模块(1)

目录 自定义导航栏 静态结构 安全区域​ 通用轮播组件 静态结构 自动导入全局组件 全局组件类型声明 .d.ts文件 注册组件 vue/runtime-core 首页 – 轮播图指示点 首页 – 获取轮播图数据 首页 – 轮播图数据类型并渲染 首页 – 轮播图总结 首页分类 首页 – 前…

五金仓库的管理数字化

随着信息技术的快速发展&#xff0c;数字化管理在各行各业中迅速普及。数字化管理可以让企业轻松高效地收集、存储和共享数据&#xff0c;并利用大数据分析和人工智能等工具进行精确分析和预测&#xff0c;从而更好地理解业务运作情况并做出相应调整&#xff0c;以提高企业效率…

AWS中lambda与DynamoDB的集成

前言&#xff1a;我在整个集成过程中&#xff0c;存在最大的问题有两个&#xff0c; 1. 没有考虑到lambda函数的权限&#xff0c;即对DynamoDB或者其他如Kinesis的权限授权&#xff0c;导致无法写入或者读取。 2.最初使用了异步方式调用&#xff0c;导致无法写数据到DynamoDB…

List list=new ArrayList()抛出的ArrayIndexOutOfBoundsException异常

1.应用场景&#xff0c;今天生产日志监控到一组new ArrayList() 进行add 异常&#xff0c;具体日志如下&#xff1a; eptionHandler.handler(178): TXXYBUSSINESS|执行异常 java.util.concurrent.CompletionException: java.lang.ArrayIndexOutOfBoundsException: Index 1 out…

Java进阶(1)——JVM的内存分配 反射Class类的类对象 创建对象的几种方式 类加载(何时进入内存JVM) 注解 反射+注解的案例

目录 引出java内存分配java内存分布概略图堆方法区常量池 创建对象内存分配 反射class文件的底层类加载顺序1.检查2.开辟静态资源空间3.常量池4.其他...5.创建一个唯一的类的对象获取Class对象的几种方式 创建对象几种方式new 看到new : new Book()反射 Class.forName(“包名.类…

代数学与理论物理中常见的群

代数学与理论物理中常见的群 代数学与理论物理中常见的群 四阶群 六阶群 对称群 二维转动群 三维转动群 三维正交群 群 O3群