java.util.Map中的putIfAbsent、computeIfAbsent、computeIfPresent、compute基本使用

本文主要是介绍java.util.Map中的putIfAbsent、computeIfAbsent、computeIfPresent、compute基本使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、put

插入或覆盖

map.put(K,V);

 

2、putIfAbsent

     以下情况插入新值

     1)key不存在

     2)key存在,但value==null

     插入新value

 

map.putIfAbsent(K,V)//个人理解,相当于
if(!map.containsKey(K)||map.get(K)==null){map.put(K,V)
}

 

3、computeIfAbsent

     以下情况插入新值

     1)key不存在

     2)key存在,但value==null

     插入新value

   与putIfAbsent不同的是,当插入的value==null时,computeIfAbsent是不做插入的,而putIfAbsent做插入。

map.computeIfAbsent(K,v->{return new Object();});//个人理解,相当于
if(!map.containsKey(K)||map.get(K)==null){if(V!=null){map.put(K,V);}else{}
}

 

4、computeIfPresent

    只有key存在才做操作

      1)新value != null,覆盖原值

      2)新value == null,移除对应的key

map.computeIfPresent(K,(k,v)->{return new Object();});//个人理解,相当于
if(map.containsKey(K)){if(V!=null){map.put(K,V);}else{map.remove(K);}
}

 

5、compute

    1)新value != null,有该key的值覆盖,无则插入

    2)新value == null,无该key什么都不做,有则移除

map.putIfAbsent(K,V);//个人理解,相当于if(V!=null){map.put(K,V);
}else{if(map.containsKey(K)){map.remove(K);}else{}
}

 

测试用例:

@Testpublic void test29(){Map<String,String> mm=new HashMap<>();mm.putIfAbsent("key1","val1");mm.putIfAbsent("key11",null);mm.putIfAbsent("key11","val11");mm.putIfAbsent("key11","val12");mm.putIfAbsent("key111",null);mm.putIfAbsent("key112",null);mm.computeIfAbsent("key2",v->{return "val2";});mm.computeIfAbsent("key22",v->{return null;});mm.computeIfAbsent("key22",v->{return "val22";});mm.computeIfAbsent("key22",v->{return "val23";});mm.computeIfAbsent("key222",v->{return null;});mm.computeIfAbsent("key112",v->{return "val112";});mm.computeIfAbsent("key3",v->{return "val3";});mm.computeIfAbsent("key4",v->{return "val4";});mm.computeIfAbsent("key5",v->{return "val5";});mm.computeIfAbsent("key5",v->{return "val555";});mm.computeIfAbsent("key6",v->{return null;});printMap(mm);System.out.println();mm.computeIfPresent("key1",(k,v)->{return "test1";});
//        mm.put("key1",null);mm.computeIfPresent("key100",(k,v)->{return "Test2";});mm.computeIfPresent("key3",(k,v)->{return null;});mm.compute("key4",(k,v)->{return "Test3";});mm.compute("key5",(k,v)->{return null;});mm.compute("key55",(k,v)->{return null;});mm.compute("key555",(k,v)->{return "val555";});printMap(mm);}private void printMap(Map<String,String> mm){Iterator<Map.Entry<String, String>> iterator = mm.entrySet().iterator();while(iterator.hasNext()){Map.Entry<String, String> next = iterator.next();System.out.println("key:"+next.getKey()+"  value:"+next.getValue());}}

输出:

key:key1  value:val1
key:key2  value:val2
key:key5  value:val5
key:key3  value:val3
key:key4  value:val4
key:key22  value:val22
key:key11  value:val11
key:key112  value:val112
key:key111  value:nullkey:key1  value:test1
key:key2  value:val2
key:key4  value:Test3
key:key555  value:val555
key:key22  value:val22
key:key11  value:val11
key:key112  value:val112
key:key111  value:null

 

这篇关于java.util.Map中的putIfAbsent、computeIfAbsent、computeIfPresent、compute基本使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730047

相关文章

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在