Java Map compute 示例 | 指定 key 的值进行计算后替换

  • 例1
  • 例2
  • 例3
  • 例4
  • 参考文献

computejava.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 的值进行计算后替换相关推荐

  1. Java - JDK8新特性,代码demo示例;

    哈哈哈哈大魔都下雪啦,敲段代码暖和暖和,嘿嘿 public class jdk8Test {@Testpublic void LambdaNew() {//before jdk8List<Str ...

  2. Java 8 新特性 宋红康跟学

    Java 8 新特性 Java 8 新特性简介 思维导图 并行流与串行流 Lambda表达式 Lambda 表达式语法 语法格式一:无参,无返回值,Lambda体只需一条语句 语法格式二:Lambda ...

  3. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

  4. java自动化测试语言高级之Java 9 新特性

    java自动化测试语言高级之Java 9 新特性 文章目录 java自动化测试语言高级之Java 9 新特性 Java 9 新特性 Java 9 新特性 Java 9 发布于 2017 年 9 月 2 ...

  5. 七、Java 14 新特性

    七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...

  6. java自动化测试语言高级之Java 8 新特性

    java自动化测试语言高级之Java 8 新特性 文章目录 java自动化测试语言高级之Java 8 新特性 Java 8 新特性 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 ...

  7. Java 9 新特性概述

    转载自 Java 9 新特性概述 Java 9 正式发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化.其中最重要的改动是 ...

  8. Java 8 新特性——实践篇

    Lambda 表达式 Lambda 表达式引入之前: 举个场景例子:当我们要对一个班级里的学生对象里各种成绩进行过滤时,比如大于85分获得A的学生集合,最初的方式是写不同的方法处理不同的科目成绩过滤: ...

  9. Java 8 新特性,Optional介绍 | 春松客服

    目录 缘起 Optional类 Optional对象构造方法 提取Optional对象的值 使用orElse()方法获取值 使用filter()方法过滤 示例程序 注意事项 使用场景 orElseGe ...

  10. Java 16 新特性介绍

    本文要点 Java 16 和即将发布的 Java 17 引入了大量特性和语言增强,有助于提高开发人员的生产力和应用程序性能 Java 16 Stream API 为常用的终端操作提供了很多新方法,有助 ...

最新文章

  1. 从0设计一个基于Redis的锁服务
  2. android c#websocket传送图片
  3. mysql sql优化_MySQL数据库SQL语句优化原理专题(三)
  4. Linux 0.11 实验环境搭建与调试
  5. Spring Boot2.0 JPA 实现分页(简单查询分页、复杂查询分页)
  6. JS前端常用工具方法
  7. 哪吒汽车宣布获得上海银行总行20亿元综合授信额度
  8. Unity直接导出Android Apk包环境配置
  9. Vmlogin防关联超级浏览器Selenium浏览器自动化详细教程
  10. BIT_陆小果的一元多项式
  11. 空间中直线与直线之间的位置关系
  12. 一分钟建立自己单位的故障报修平台
  13. 快圣诞节了,用Python 送你一棵圣诞树
  14. DBeaver mySQL 远程操作数据库
  15. PPT中图表不同粘贴方式的区别
  16. UI设计师为什么要学习字体设计?
  17. python绘制曲线、散点图
  18. 位运算实现加减乘除四则运算
  19. 非常全面的支付宝钱包系统架构图解
  20. ZEGO即构科技荣获36氪【WISE2020中国新经济之王最具影响力企业】

热门文章

  1. 【C补充】指向指针或函数的指针
  2. python日历程序编写_Python创建日历实例
  3. 关于零信任的 “灵魂” 12问,企业未来如何适配“零信任”?
  4. 发现了个神奇的图片压缩工具
  5. 【树形dp 题解】 洛谷P3174 毛毛虫
  6. 如何批量将 Xlsx 格式的 Excel 文档转为 Xls 格式
  7. word自带公式编辑_如何在word中调整公式大小
  8. 在虚拟机安装Win7出现:directory ezboot not found error loading image:CDMENU.EZB
  9. 面试被问到你的优点和缺点时,该如何完美的回答
  10. 颜色及图片识别原理,颜色识别传感器介绍