Java 8之Map新增方法<转>
在Java 8中的Map.Entry接口中增加了comparingByKey, comparingByValue方法,它们都返回Comparator<Map.Entry<K,V>>, Comparator是一个函数接口,主要是方便Lambda表达式的使用。
在Java 8中的Map接口增加了一些default方法,提升了对key, value操作的便利性。下面是基本数据的定义,通过这些数据说明新增的一些方法。
1 |
Map<Integer, String> map = new HashMap<>(); |
getOrDefault 方法
如果指定的key存在,则返回该key对应的value,如果不存在,则返回指定的值。例子如下
1 |
// key为4不存在,输出 d |
forEach 方法
遍历Map中的所有Entry, 对key, value进行处理, 接收参数 (K, V) -> void, 例子如下
1 |
// 输出1a, 2b, 3c |
replaceAll 方法
替换Map中所有Entry的value值,这个值由旧的key和value计算得出,接收参数 (K, V) -> V, 类似如下代码
1 |
for (Map.Entry<K, V> entry : map.entrySet()) |
例如如下:
1 |
map.replaceAll((key, value) -> (key + 1) + value); |
putIfAbsent 方法
如果key关联的value不存在,则关联新的value值,返回key关联的旧的值,类似如下代码
1 |
V v = map.get(key); |
示例代码如下:
1 |
map.putIfAbsent(3, "d"); |
remove 方法
接收2个参数,key和value,如果key关联的value值与指定的value值相等(equals),则删除这个元素,类似代码如下:
1 |
if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
|
示例代码如下:
1 |
map.remove(1, "b"); |
replace(K key, V oldValue, V newValue) 方法
如果key关联的值与指定的oldValue的值相等,则替换成新的newValue,类似代码如下:
1 |
if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
|
示例代码如下
1 |
map.replace(3, "a", "z"); |
replace(K key, V value) 方法
如果map中存在key,则替换成value值,否则返回null, 类似代码如下:
1 |
if (map.containsKey(key)) {
|
示例代码如下:
1 |
// 输出旧的值, a |
computeIfAbsent 方法
如果指定的key不存在,则通过指定的K -> V计算出新的值设置为key的值,类似代码如下:
1 |
if (map.get(key) == null) {
|
示例代码如下:
1 |
map.computeIfAbsent(1, key -> key + " computed"); |
computeIfPresent 方法
如果指定的key存在,则根据旧的key和value计算新的值newValue, 如果newValue不为null,则设置key新的值为newValue, 如果newValue为null, 则删除该key的值,类似代码如下:
1 |
if (map.get(key) != null) {
|
示例代码如下:
1 |
map.computeIfPresent(1, (key, value) -> (key + 1) + value); |
compute 方法
compute方法是computeIfAbsent与computeIfPresent的综合体。
merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) 方法
如果指定的key不存在,则设置指定的value值,否则根据key的旧的值oldvalue,value计算出新的值newValue, 如果newValue为null, 则删除该key,否则设置key的新值newValue。类似如下代码:
1 |
V oldValue = map.get(key); |
示例代码如下:
1 |
// 存在key为1, 输出 a merge |
Java 8之Map新增方法<转>的更多相关文章
- Java中迭代Map的方法
Map<String, String> mapServlet = new HashMap<String, String>(); System.out.println(" ...
- Java compiler level does not match the version of the installed Java project facet. map解决方法
右键项目"Properties",在弹出的"Properties"窗口左侧,单击"Project Facets",打开"Proje ...
- 谈谈java中遍历Map的几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...
- java中遍历Map几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点. 先初始化一个map: publ ...
- jdk8中map新增的merge方法介绍
1.Map.merge方法介绍 jdk8对于许多常用的类都扩展了一些面向函数,lambda表达式,方法引用的功能,使得java面向函数编程更为方便.其中Map.merge方法就是其中一个,merge方 ...
- Java中遍历Map集合的四种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- Java中遍历Map的几种方法
转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基 ...
- java中遍历map对象的多种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...
- java中遍历MAP,嵌套map的几种方法
java中遍历MAP的几种方法 Map<String,String> map=new HashMap<String,String>(); map.put("us ...
随机推荐
- Go编程基础(介绍和安装)
Michaelhbjian 2018.10.07 19:41 字数 892 阅读 317评论 0喜欢 0 Go(又称Golang[3])是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回 ...
- NumPy基本操作快速熟悉
NumPy 是 Python 数值计算非常重要的一个包.很多科学计算包都是以 NumPy 的数组对象为基础开发的. 本文用代码快速过了一遍 NumPy 的基本操作,对 NumPy 整体有一个把握.希望 ...
- 别名alias永久生效别名alias永久生效;虚拟机的NAT模式,进行静态IP配置,并A、B的实现免密访问
别名alias永久生效 1.打开cd /etc/profile.d 目录 新建文件my_alias.sh 2.my_alias.sh里面添加 alias p=’poweroff -h’ alias r ...
- excel双击下拉制作(以及双击下拉字符超限处理)
最近,在项目的开发过程中,遇到了一个问题,自己要修改代码中的excel模板,有些列要处理成双击下拉的形式. excel制作双击下拉: 当然,我想,这对于大家来说是不难的,好实现,但是,我在制作的过程中 ...
- 公司框架-关于verifyInputgbg()方法的使用注意事项
verifyInputgbg这个方法的主要作用是:一次校验页面上的所有非空的比录项. 今天在使用这个方法的时候,遇到了这样一个问题,自己在页面上明明都录入有值,但是在还是报页面的录入信息不完整.阻断. ...
- applyMiddleware 沉思录
let newStore = applyMiddleware(mid1, mid2, mid3, ...)(createStore)(reducer, null); 给({ getState, dis ...
- proxysql 学习二 admin-web 启用
proxysql 从1.4.4 开始内置了一个简单的http server,可以方便进行状态信息的查看,今天在 尝试通过配置参数以及update global_variables 没有生效,set 也 ...
- Java中lambda表达式学习
一.Lambda表达式的基础语法: Java8中引入了一个新的操作符"->"该操作符称为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式拆分为两部分: 左侧:L ...
- 洛谷 p1968 美元汇率 题解
传送门 美元由马克转化,马克由美元转化 求最大美元 每一天只有2种选择 ①:不转化另一货币 ②:转化另一货币 典型01背包 可以开一个二维数组f[100][3] F[i][1]表示前i天获得最大美元 ...
- vue-skeleton-webpack-plugin骨架屏与page-skeleton-webpack-plugin骨架屏生成插件
vue-skeleton-webpack-plugin与page-skeleton-webpack-plugin使用 插件github地址:https://github.com/lavas-proje ...