参考博客

default方法

map.put(1, "a");

map.put(2, "b");

getOrDefault方法

如果指定的key存在,返回value,不存在,返回指定的值

System.out.pringln(map.getOrDefaullt(4, "d"))

forEach方法

遍历Map中的所有Entry, 对key, value进行处理

// 输出1a, 2b, 3c

map.forEach((key, value) -> System.out.println(key + value));

replaceAll方法

替换Map中所有Entry的value值,这个值由旧的key和value计算得出,接收参数 (K, V) -> V, 类似如下代码

map.replaceAll((key, value) -> (key + 1) + value);

// 输出 12a 23b 34c

map.forEach((key, value) -> System.out.println(key + value));

putIfAbsent 方法

如果key关联的value不存在,则关联新的value值,返回key关联的旧的值

相当于

V v = map.get(key);

if (v == null)

v = map.put(key, value);

return v;

remove 方法

接收2个参数,key和value,如果key关联的value值与指定的value值相等(equals),则删除这个元素

if (map.containsKey(key) && Objects.equals(map.get(key), value)) {

map.remove(key);

return true;

} else

return false;

replace(K key, V oldValue, V newValue) 方法

如果key关联的值与指定的oldValue的值相等,则替换成新的newValue

if (map.containsKey(key) && Objects.equals(map.get(key), value)) {

map.put(key, newValue);

return true;

} else

return false;

replace(K key, V value) 方法

if (map.containsKey(key)) {

return map.put(key, value);

} else

return null;

computeIfAbsent 方法

如果指定的key不存在,则通过指定的K -> V计算出新的值设置为key的值

if (map.get(key) == null) {

V newValue = mappingFunction.apply(key);

if (newValue != null)

map.put(key, newValue);

}

栗子:

map.computeIfAbsent(1, key -> key + " computed");

// 存在key为1,则不进行计算,输出值 a

System.out.println(map.get(1));

map.computeIfAbsent(4, key -> key + " computed");

// 不存在key为4,则进行计算,输出值 4 computed

System.out.println(map.get(4));

computeIfPresent 方法

如果指定的key存在,则根据旧的key和value计算新的值newValue,

如果newValue不为null,则设置key新的值为newValue,

如果newValue为null,则删除该key的值

if (map.get(key) != null) {

V oldValue = map.get(key);

V newValue = remappingFunction.apply(key, oldValue);

if (newValue != null)

map.put(key, newValue);

else

map.remove(key);

}

eg:

map.computeIfPresent(1, (key, value) -> (key + 1) + value);

// 存在key为1, 则根据旧的key和value计算新的值,输出 2a

System.out.println(map.get(1));

map.computeIfPresent(2, (key, value) -> null);

// 存在key为2, 根据旧的key和value计算得到null,删除该值,输出 null

System.out.println(map.get(2));

merge(K key, V value, BiFunction super V, ? super V, ? extends V> remappingFunction) 方法

如果指定的key不存在,则设置指定的value值,

否则根据key的旧的值oldvalue,value计算出新的值newValue,

如果newValue为null,

则删除该key,否则设置key的新值newValue。类似如下代码

V oldValue = map.get(key);

V newValue = (oldValue == null) ? value :

remappingFunction.apply(oldValue, value);

if (newValue == null)

map.remove(key);

else

map.put(key, newValue);

eg:

// 存在key为1, 输出 a merge

System.out.println(map.merge(1, " merge", (oldValue, newValue) -> oldValue + newValue));

// 新值为null,删除key,输出 null

System.out.println(map.merge(1, " merge", (oldValue, newValue) -> null));

// 输出 " merge"

System.out.println(map.merge(4, " merge", (oldValue, newValue) -> oldValue + newValue));

新增方法java_Java8_map新增方法相关推荐

  1. flash绘图API :flash player11新增的绘图API方法--cubicCurveTo

    今天除了更新的3D的api之前,另外在flash Graphics方法当中新增了一个cubicCurveTo的方法,能够使用其进行绘制贝塞尔曲线,奇怪是文档里面对应的flash 版本是12,不知道是不 ...

  2. js笔记(三)ES5、ES5新增的数组的方法、字符串的方法、字符编码、对象的序列化和反序列化、bind

    数组方法.字符串方法总结 大目录 小目录 一.ES5严格模式 1. 严格模式: 2. 严格模式的行为变更: 二.ES5新增的数组的方法 1. 判断是否为数组:Array.isArray(): 2. 判 ...

  3. linux添加了一条静态路由,为Linux新增静态路由的方法

    为Linux新增静态路由的方法 静态路由是用户手工配置的路由信息,起到保护网络安全的作用,那么要如何为Linux系统新增一条静态路由呢?下面YJBYS小编就给大家介绍下Linux新增静态路由器的方法. ...

  4. ubuntu新增固态硬盘的方法

    这两天买了新的固态,居然用不了,在乌班图上面读写操作不了,通过下面两个作者的方法即可安装. 注意: 1.首先需要对固态在win系统下,进行分区即一个区,填写data盘.然后才能在乌班图系统识别出. 2 ...

  5. 数据类型_array_es6新增的数组遍历方法

    数组遍历 [1]map方法 [2]filter方法 [3]forEach方法 [4]some方法 [5]every方法 [6]findIndex方法 [7]includes方法 [8]reduce方法 ...

  6. Go 学习笔记(34)— Go 方法声明、方法调用、方法值、方法表达式、切片对象方法、指针对象方法

    1. 方法声明 Go 语言的方法非常纯粹, 可以看作特殊类型的函数, 其显式地将对象实例或指针作为函数的第一个参数, 并且参数名可以自己指定, 而不强制要求一定是 this 或 self .这个对象实 ...

  7. 【中级软考】什么是“敏捷过程的开发方法(敏捷方法agile)“(极限编程XP、特征驱动开发FDD、并列争球法Scrum、水晶法Crystal、开放源码法、自适应软件开发 ASD方法)

    文章目录 敏捷方法 1 极限编程 XP 1.四大价值观 2.十二个最佳实践 2 特征驱动开发 FDD 1.FDD 角色定义 2.核心过程 3.最佳实践 3 并列争球法 Scrum 1.Scrum 的五 ...

  8. python基础之类的属性方法、魔术方法普通方法

    类的定义.调用方法.引用属性 类的属性和方法 类的属性 类属性的访问 类属性可以直接访问,无需实例化 类属性也可以通过实例来访问 实际上,所有的实例是共享类属性的 类属性的修改 修改了类属性后,对应的 ...

  9. js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf

    全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中函数也是一种对象,因此有自己的原型对象,可以作为其他对象的属性,也可以作为其他函数的参数. 函数方法 [apply() ...

最新文章

  1. JavaScript的toString()和valueOf()函数
  2. ActiveReport的小数显示方法
  3. Kafka如果丢了消息,怎么处理的?
  4. 企业云上安全事件突发,这五个问题值得运维大佬们日常自查!
  5. idea spring helloworld
  6. RHEL5.3下MRTG+SNMP的搭建
  7. linux 安装mysql8_MySQL 8.0与MariaDB 10.4,谁更易于填坑补锅?
  8. python用于数据处理真的那么强大嘛_为什么有那么多人选择Python,真的有那么好吗?...
  9. 手持“六脉神剑”、横跨软硬领域,揭晓英特尔构筑智慧云基石宝典!
  10. python运维开发实战项目-1
  11. 信息流广告投放分析实战案例!
  12. php导出excel列宽,PHP导出Excel 之 Spreadsheet_Excel_Writer
  13. 计算机如何连接iphone,iPhone6如何连接到电脑?iPhone6连接到电脑图解教程
  14. imovie导入媒体没有声音的解决办法
  15. SANER 2018 论文阅读- Dissection of a Bug Dataset: Anatomy of 395 Patches from Defects4J
  16. maven本地仓库的更新
  17. Access根据出生日期计算年龄_不好意思,Power Query里根据出生日期计算年龄有点儿繁琐!...
  18. linux中怎么修改用户组名,Linux 下如何修改用户名(同时修改用户组名和家目录)...
  19. Postgresql源码(5)缓冲区管理
  20. 小米路由搭建KMS Server

热门文章

  1. DependentLayout相对布局
  2. 时间怎么算用计算机,抖音珍惜时间计算器怎么用
  3. Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)
  4. Python os.path() 模块 详解 附算例
  5. wxWidgets:HtmlLbox wxWidgets 示例
  6. boost::statechart模块实现类型信息测试
  7. boost::spirit模块演示了 AST 的生成,然后将其转储为人类可读的格式
  8. boost::hash_range相关的测试程序
  9. boost::advance用法的测试程序
  10. boost::hana::scan_right用法的测试程序