JAVA Map类compute方法详解及样例
JAVA Map类提供了compute方法,定义是: default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
用于计算指定key的值,如果Map中不存在指定的key,则计算时值为null, 并将计算的结果作为key的值,但需要注意3点:
如果remappingFunction函数的结果是null, 如果Map存在此key且值不为null,则删除此key, 否则不做改变
如果remappingFunction函数抛出了异常,则compute把异常抛出,Map不做改变
默认实现不保证同步或该方法的原子性。任何实现提供原子性保证必须重写这个方法并记录它并发性能,如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方法详解及样例相关推荐
- HashMap类Compute方法详解及样例
hashMap简介 hashMap是基于Map的实现,并且允许null value和null key,它不保证存储的数据的顺序.特别要注意的是hashMap不是同步的,要实现同步除了在外部实现同步外, ...
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
- 使用Java操作文本文件的方法详解
使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...
- Android之TelephonyManager类的方法详解
林计钦-JAVA java技术群:127834248 博客园 首页 社区 新随笔 联系 订阅 管理 随笔-105 评论-24 文章-0 trackbacks-0 Andr ...
- Java Thread的interrupt方法详解
Java Thread的interrupt方法详解 一.概述 interrupt方法的目的是给线程发出中断信号,但是不保证线程真的会中断 中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应 ...
- java barrier_Java并发类CyclicBarrier方法详解
Cyclic是周期的意思,Barrier是关卡的意思.CyclicBarrier不仅有CountDownLatch的功能,还可以实现屏障等待,即阶段性同步.因此适用于,需要循环地实现线程一起做任务的目 ...
- java处理字符串Patter与Matcher类与其方法详解
1.使用Patter与Matcher类 Pattern 类表示编译的正则表达式. 使用 Pattern 类的静态方法 compile() 获取 Pattern 类引用. 以下代码段用于创建 Patte ...
- Java简单类、变量详解(概念和分类、声明、命名、初始化)
1初识JAVA简单类 (1)创建第一个Java程序的具体步骤: 第一步:创建一个工程,在Package Explorer空白区域中右击New->点击Java Project->填写Proj ...
- 【Java】5.2 方法详解
目录 方法 递归方法 方法重载 ==================================================== 方法 1.从语义定义的角度来看必须定义在类中,类.方法||实例 ...
- java.lang.Class.getDeclaredMethod()方法详解
Java.lang.Class.getDeclaredMethod()方法用法 注:方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法. 描述 java.lang.C ...
最新文章
- 干货!图神经网络及其自监督学习
- php 多长时间前,php 多长时间之前 的函数
- QT的QMutableHashIterator类的使用
- 《openssl编程》之基础知识
- 使用tinylog 1.1改进您在Java EE应用程序中的登录
- palapaweb的mysql无法运行_Mysql 服务无法启动 服务没有报告任何错误
- php搜索功能与jquery搜索功能,JavaScript_基于jQuery实现页面搜索功能,jQuery实现页面搜索,搜索筛选 - phpStudy...
- tomcat9 性能调优
- amd用不了android studio,解决AMD无法使用Android studio问题
- CSS盒子模型(内容区、边框、内外边距)
- 各大AI 开放平台一览
- 图片360度无死角自由旋转
- js动画效果(移动、变化效果)实现整理
- 板材开料最优算法_电子开料锯比较普通锯的五大优势与具体的区别
- 独立钻石Solitaire算法求解
- 拉格朗日插值法和孙子定理
- native react 折线图_react-echarts之折线图的显示
- 计算机辅助设计在工业,【工业设计论文】工业设计专业计算机辅助设计课程的教学(共3476字)...
- 【openCV入门之二】 快速上手
- 基于500w业务数据的存储选型
热门文章
- 淘宝API 搜索相似的商品
- POJ 1252 Euro Efficiency G++ 完全背包 背
- react 工程启动运行时,报错Content not from webpack is served from ...
- java textfield 右对齐_TextField右对齐问题javafx
- java map failed_java.lang.OutOfMemoryError:Map failed总结
- 亿能第二期测试沙龙-《企业自动化测试专题研讨会》4月中旬举行
- 读万卷书,行万里路。
- c语言召唤窗口,如何设计出高点击率的行为召唤按钮?
- windows下使用frida遇到的问题
- 笔记本电脑win10打开照相机显示灰色相机解决办法