java版本JDK1.8
Map是我们经常使用的,在面对复杂Map时,我们怎么更好的去维护呢?

这里的复杂Map就是<K,V>中V是一个Collection集合比如:

那么它是一个复杂Map,如果一个<K,V>的V是Integer这种atomic value,那就不是复杂Map。

无论是开发还是在刷题中,我们经常做这种操作,

我们先拿到Key值对应的Collection,再往Collection中加入元素。但是这会出现一个问题!!!
可能这个Collection根本不存在。
那么代码就变成这样了。

所以,为了不抛出异常,
你的代码需要能够处理key不在map里的情况。
你可能会这样处理。

也就是当key不在map中时,提前new 一个 Collection放进去。
虽然这样不会抛出异常类,但是代码却变复杂了,怎么简化这段代码呢??
我们的 map.computeIfAbsent();方法就派上用场了。
computeIfAbsent()意思时当key不在Map中时,做操作。

使用一行代码,代替三行代码。

computeIfAbsent方法是顶级接口Map中的方法。所以只要是实现l了Map接口的实现类时,都可以使用这个方法。

computeIfAbsent简单介绍

computeIfAbsent() 方法对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 Map 中。

computeIfAbsent() 方法的语法为:

hashmap.computeIfAbsent(K key, Function remappingFunction)
注:hashmap 是 HashMap 类的一个对象。

参数说明:

key - 键
remappingFunction - 重新映射函数,用于重新计算值

返回值

如果 key 对应的 value 不存在,则使用获取 remappingFunction 重新计算后的值,并保存为该 key 的 value,否则返回 value。

参照:
油管博主SchelleyYuki
jdk1.8 Map<K,V>.computeIfAbsent源码注解

[优雅代码]-调用java集合Map.computeIfAbsent()方法相关推荐

  1. Java集合Map,set, list 之间的转换

    Java集合Map,set, list 之间的转换 前言: 通过思维导图复习联系,看到一个HashMap排序题上机题之后有的一个感想,题目如下,看看你能时间出来么? 已知一个HashMap<In ...

  2. thymeleaf 调用java,thymeleaf模板引擎调用java类中的方法(附源码)

    前言 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决,有的是把问题留在项目的issue里提出,有的是在我的私人博客里留言,还有的则是直接添加我的qq来找我讲自己遇到 ...

  3. JSP中调用java类中的方法

    JSP中调用java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:test 2.再在包中添加一个类:如 package test; public class conDatabase { ...

  4. Java集合中contains方法的效率对比

    Java集合中contains方法的效率对比 Java集合List.Set中均有对集合中元素是否存在的判断方法contains(Object o):Map中有对key及value是否存在的判断方法co ...

  5. 终于,我读懂了所有Java集合——map篇(多线程)

    多线程环境下的问题 1.8中hashmap的确不会因为多线程put导致死循环(1.7代码中会这样子),但是依然有其他的弊端,比如数据丢失等等.因此多线程情况下还是建议使用ConcurrentHashM ...

  6. 过滤Java集合的最佳方法是什么?

    我想基于谓词过滤java.util.Collection . #1楼 JFilter http://code.google.com/p/jfilter/最适合您的要求. JFilter是一个简单且高性 ...

  7. 终于,我读懂了所有Java集合——map篇

    首先,红黑树细节暂时撸不出来,所以没写,承诺年前一定写 HashMap (底层是数组+链表/红黑树,无序键值对集合,非线程安全) 基于哈希表实现,链地址法. loadFactor默认为0.75,thr ...

  8. Java集合——Map接口学习总结

    一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...

  9. java集合 — — Map集合

    十.Map集合 10.1.概述 现实生活中,常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一对应的关系,就叫做映射.Java提供了专门的集台类用来存放这种对 ...

最新文章

  1. loguru log 日志的使用
  2. Cloud Native未来值得关注的方向:Service Mesh简介
  3. SpringMVC校验---SpringMVC学习笔记(八)
  4. 浅谈.Net异步编程的前世今生----EAP篇
  5. php关闭按钮,C#_winform去掉右上角关闭按钮的方法,一种方法是可以在窗体的属性 - phpStudy...
  6. 输出一个数的二进制序列中1的个数(三种方法)
  7. 显卡,不能显示问题解决
  8. 净水器怎么放_今日头条 | 如何清洗净水器的陶瓷滤芯,要不要来学一下!
  9. 如何编写一个好的测试用例
  10. mysql 5.0创建函数_MySQL5.0中的Function和Procedure
  11. QT学习之自定义信号
  12. SteamVR简介(Yanlz+Steam+VR+Unity+AR+MR+XR+立钻哥哥+==)
  13. win7 添加 邮件服务器,win7系统如何配置outlook邮件客户端教程
  14. gephi和python_介绍用Gephi进行数据可视化
  15. zabbix实现对mysql数据库的监控
  16. 使用牛顿迭代法求根 一元三次方程的根
  17. 一位Java工程师的阶段性工作总结
  18. 约瑟夫问题和又遇约瑟夫问题
  19. 自动控制原理之自动控制的基本概念
  20. 什么时候可以找回民族的自尊,不再崇洋媚外?--从华晨老总骏捷发布会的一番话说起...

热门文章

  1. 获取ccid的标准方法
  2. device-mapper: multipath: Failing path recovery
  3. 使用mybatisPlus时,报错 Data truncation: Out of range value for column ‘id‘ at row 1
  4. 原生js预览ofd文件,JavaScript
  5. ijk基于exo_github上十二款最著名的Android播放器开源项目
  6. 后台集成解决方案 avue
  7. 设计模式常用的七大原则之③【依赖倒转】原则
  8. mysql 分区 线性hash_MySQL表分区(3)哈希分区-hash
  9. HTML5滑动(swipe)事件,移动端触摸(touch)事件
  10. 红黑树解决了什么问题