JAVA Map类提供了compute方法,定义是: default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)

用于计算指定key的值,如果Map中不存在指定的key,则计算时值为null, 并将计算的结果作为key的值,但需要注意3点:

  1. 如果remappingFunction函数的结果是null, 如果Map存在此key且值不为null,则删除此key, 否则不做改变

  2. 如果remappingFunction函数抛出了异常,则compute把异常抛出,Map不做改变

  3. 默认实现不保证同步或该方法的原子性。任何实现提供原子性保证必须重写这个方法并记录它并发性能,如ConcurrentMap类的实现

compute方法接受两个参数

  • key:关联value的key

  • remappingFunction: 函数计算值

Returns:返回更新后的该key映射的value值,若key没有映射的value值,则返回null

1. 源码实现:

    default V compute(K key,BiFunction<? super K, ? super V, ? extends V> remappingFunction) {Objects.requireNonNull(remappingFunction);V oldValue = get(key);V newValue = remappingFunction.apply(key, oldValue);if (newValue == null) {// delete mappingif (oldValue != null || containsKey(key)) {// something to removeremove(key);return null;} else {// nothing to do. Leave things as they were.return null;}} else {// add or replace old mappingput(key, newValue);return newValue;}}

2. 相似的方法

分别是指定的key存在和不存在情况时,使用remappingFunction计算新值,如果新值不为null,则将key的值设置为新值

default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {

3. 示例代码段

#创建或追加内容到指定的key, 作用类似于 map.merge(key, msg, String::concat)
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))}#创建或累加计算指定key的次数
map.compute(type, (k, v) -> v == null ? 1 : v + 1);

JAVA Map类compute方法详解及样例相关推荐

  1. HashMap类Compute方法详解及样例

    hashMap简介 hashMap是基于Map的实现,并且允许null value和null key,它不保证存储的数据的顺序.特别要注意的是hashMap不是同步的,要实现同步除了在外部实现同步外, ...

  2. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  3. 使用Java操作文本文件的方法详解

    使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...

  4. Android之TelephonyManager类的方法详解

    林计钦-JAVA java技术群:127834248 博客园   首页   社区   新随笔   联系   订阅   管理 随笔-105  评论-24  文章-0  trackbacks-0 Andr ...

  5. Java Thread的interrupt方法详解

    Java Thread的interrupt方法详解 一.概述 interrupt方法的目的是给线程发出中断信号,但是不保证线程真的会中断 中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应 ...

  6. java barrier_Java并发类CyclicBarrier方法详解

    Cyclic是周期的意思,Barrier是关卡的意思.CyclicBarrier不仅有CountDownLatch的功能,还可以实现屏障等待,即阶段性同步.因此适用于,需要循环地实现线程一起做任务的目 ...

  7. java处理字符串Patter与Matcher类与其方法详解

    1.使用Patter与Matcher类 Pattern 类表示编译的正则表达式. 使用 Pattern 类的静态方法 compile() 获取 Pattern 类引用. 以下代码段用于创建 Patte ...

  8. Java简单类、变量详解(概念和分类、声明、命名、初始化)

    1初识JAVA简单类 (1)创建第一个Java程序的具体步骤: 第一步:创建一个工程,在Package Explorer空白区域中右击New->点击Java Project->填写Proj ...

  9. 【Java】5.2 方法详解

    目录 方法 递归方法 方法重载 ==================================================== 方法 1.从语义定义的角度来看必须定义在类中,类.方法||实例 ...

  10. java.lang.Class.getDeclaredMethod()方法详解

    Java.lang.Class.getDeclaredMethod()方法用法 注:方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法. 描述 java.lang.C ...

最新文章

  1. 干货!图神经网络及其自监督学习
  2. php 多长时间前,php 多长时间之前 的函数
  3. QT的QMutableHashIterator类的使用
  4. 《openssl编程》之基础知识
  5. 使用tinylog 1.1改进您在Java EE应用程序中的登录
  6. palapaweb的mysql无法运行_Mysql 服务无法启动 服务没有报告任何错误
  7. php搜索功能与jquery搜索功能,JavaScript_基于jQuery实现页面搜索功能,jQuery实现页面搜索,搜索筛选 - phpStudy...
  8. tomcat9 性能调优
  9. amd用不了android studio,解决AMD无法使用Android studio问题
  10. CSS盒子模型(内容区、边框、内外边距)
  11. 各大AI 开放平台一览
  12. 图片360度无死角自由旋转
  13. js动画效果(移动、变化效果)实现整理
  14. 板材开料最优算法_电子开料锯比较普通锯的五大优势与具体的区别
  15. 独立钻石Solitaire算法求解
  16. 拉格朗日插值法和孙子定理
  17. native react 折线图_react-echarts之折线图的显示
  18. 计算机辅助设计在工业,【工业设计论文】工业设计专业计算机辅助设计课程的教学(共3476字)...
  19. 【openCV入门之二】 快速上手
  20. 基于500w业务数据的存储选型

热门文章

  1. 淘宝API 搜索相似的商品
  2. POJ 1252 Euro Efficiency G++ 完全背包 背
  3. react 工程启动运行时,报错Content not from webpack is served from ...
  4. java textfield 右对齐_TextField右对齐问题javafx
  5. java map failed_java.lang.OutOfMemoryError:Map failed总结
  6. 亿能第二期测试沙龙-《企业自动化测试专题研讨会》4月中旬举行
  7. 读万卷书,行万里路。
  8. c语言召唤窗口,如何设计出高点击率的行为召唤按钮?
  9. windows下使用frida遇到的问题
  10. 笔记本电脑win10打开照相机显示灰色相机解决办法