computeIfAbsent(K key,    Function<? super K, ? extends V> mappingFunction)如果map里面不存在key,则执行mappingFunction
computeIfPresent(K key,    BiFunction<? super K, ? super V, ? extends V> remappingFunction)如果map里面存在key,则执行remappingFunction
compute(K key,    BiFunction<? super K, ? super V, ? extends V> remappingFunction)无论map里面是不是有key,都执行remappingFunction

注意computeIfAbsent的第二个参数是k,computeIfPresent和compute第二个参数都是(k,v)

public static void main(String[] args) {HashMap<String, List<String>> map = new HashMap();// key不存在的时候,执行后面的方法List<String> list1 = map.computeIfAbsent("list1", k -> new ArrayList<>());list1.add("addList1");map.put("absentExist", new ArrayList<>());List<String> absentExist = map.computeIfAbsent("absentExist", k -> new ArrayList<>());absentExist.add("aaaaaa the key is exist");System.out.println(absentExist.get(0));List<String> absentNotExist = map.computeIfAbsent("absentNotExist", k -> {System.out.println("k========="+k);return new ArrayList<>();});absentNotExist.add("aaaaa the key is not exist");System.out.println(absentNotExist.get(0));map.put("presentExist", new ArrayList<>());
//        相当于List<String> list;list = map.get("presentExist");if(list == null){list = new ArrayList<>();map.put("presentExist", list);}list.add("addList");// key存在的时候,执行后面的方法List<String> list2 = map.computeIfPresent("list2", (k, v) -> new ArrayList<>());List<String> presentExist = map.computeIfPresent("presentExist", (k, v) -> {v.add("ppppp the key is exist");return v;});System.out.println(presentExist.get(0));List<String> presentNotExist = map.computeIfPresent("presentNotExist", (k, v) -> {v.add("ppppp the key is not exist");return v;});//  Exception in thread "main" java.lang.NullPointerException//    at com.zxh.mongodbdemo.test.DPLeecode.main(DPLeecode.java:61)//  不存在,所以不执行里面的方法,里面不会报错,但是没有presentNotExist,所以这里报错了。
//        System.out.println(presentNotExist.get(0));map.put("exist" , new ArrayList<>());// 不论key存不存在,都执行后面的方法List<String> list3 = map.compute("list3", (k, v) -> new ArrayList<>());List<String> exist = map.compute("exist", (k, v) -> {v.add("the key is exist");return v;});System.out.println(exist.get(0));List<String> notExist = map.compute("notExist", (k, v) -> {
//            v = new ArrayList<>();//  Exception in thread "main" java.lang.NullPointerException//    at com.zxh.mongodbdemo.test.DPLeecode.lambda$main$8(DPLeecode.java:78)//    at java.util.HashMap.compute(HashMap.java:1197)//   at com.zxh.mongodbdemo.test.DPLeecode.main(DPLeecode.java:71)//  不存在,也执行里面的方法,v是空,所以报错v.add("the key is not exist");return v;});System.out.println(notExist.get(0));}

JDK 8 - computeIfAbsent,computeIfPresent,compute相关推荐

  1. java ifpresent_java映射的merge、compute、computeIfAbsent、computeIfPresent的使用

    merge.compute.computeIfAbsent.computeIfPresent是java8中的语法. merge:通过构建BiFunction或则是调用java中的一些函数来操作merg ...

  2. Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出 ...

  3. Centos安装tomcat,haproxy,jdk

    为什么80%的码农都做不了架构师?>>>    下载tomcat #wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/t ...

  4. 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    2019独角兽企业重金招聘Python工程师标准>>> 在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码.当前有很多开源框架可以完成这些功能,如A ...

  5. Linux下安装JDK,Tomcat,Mysql详细教程

    1. 概述 今天教大家在linux下安装jdk,mysql以及tomcat.在javaweb开发中,最后完成的项目代码,一般都是布在linux服务器下的.因为linux服务器可以说是安全性稳定性都比w ...

  6. 总结Linux-ubuntu基本配置方法(远程连接,数据库,jdk,tomcat......)

    1.远程连接 最小化安装ubuntu之后,一开始是不能直接使用Xshell等工具进行远程连接的,需要安装ssh服务,首先得两个主机可以互相ping通,接着输入:sudo apt-get install ...

  7. eclipse下载,安装,JDk环境配置教程

    eclipse下载,安装,JDk环境配置教程(多图) 第一步:下载eclipse,并安装. 下载链接:http://www.eclipse.org/downloads/ 点击 Download Pac ...

  8. JVM插桩之四:Java动态代理机制的对比(JDK和CGLIB,Javassist,ASM)

    一.class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件, ...

  9. JDK,JRE,JVM,JIT

    jdk是java的开发工具包(Java development kit). jre是java的运行环境(Java run-time). jvm则是让java能够在任何平台运行的虚拟机(Java vir ...

最新文章

  1. 在Ubuntu 16.04.5 LTS上使用python第三方库QRCode 6.0生成二维码实录
  2. 图解梯度下降背后的数学原理
  3. ActionBar右边菜单按钮的添加
  4. java 关键字final static
  5. LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址
  6. selenium+Headless Chrome实现不弹出浏览器自动化登录
  7. 怎么去观察php运行原理,php运行原理如何理解,具体看代码?
  8. 0x00007FFEBAD050D8 处(位于 first.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000000DD73CE
  9. python 字符串格式化%s_Python字符串格式化%s%d%f详解
  10. 住宅内部通信系统市场现状研究分析与发展前景预测报告
  11. C#在Word表格中插入图片调整大小Debug
  12. java.exe占用8081端口
  13. Unlocking Information in the Microsoft Office System Using XML
  14. javascript 删除节点
  15. 爬虫技术:携程爬虫阳光问政数据
  16. 友盟QQ第三方登录分享
  17. VPN 原理以及实现
  18. Surround360 README文档——中文翻译
  19. 计算机考试的话语,考试祝福语简短 祝考试顺利的一句话
  20. 毫秒转化成几天几个小时几分几秒

热门文章

  1. java地图代码_如何在Java中生成地图?
  2. spring schedule 配置多任务动态 cron 【增删启停】
  3. 浏览器插件实现GitHub代码翻译原型演示
  4. 一个常用的电池包电压检测电路
  5. oracle 建分区索引_Oracle分区索引
  6. php qq授权_PHP模拟QQ网页版授权登录的案例
  7. 不同需求下,CPU怎么选?
  8. Cannot enhance @Configuration bean definition ‘dataSourceConfig‘ since its singleton instanc .......
  9. Vue安装element ui踩坑
  10. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)