总所周知,Java8最大的特性就说更多的面向函数,比如引入了Lambda等,可以更好的进行函数式编程。
1.merge()
merge()可以这么理解:它将新的值赋值到key(如果不存在)或更新给定的key值对应的value。源码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14default V merge(K key,V value,BiFunction<? super V, ? super V, ? extends V> remappingFunction){ Object.requireNonNull(remappingFunction); Object.requireNonNull(value); V oldValue = this.get(key); V newValue = oldValue == null ? value : remappingFunction.apply(oldValue,value); if(newValue == null){ this.remove(key); }else{ this.put(key,newValue); } return newValue; }
原理如下:
该方法接收三个参数:一个key值,一个value值,一个remappingFunction,如果给定的key不存在,它就变成了put(key,value)。但是,如果key已经存在一些值,我们remappingFunction可以选择合并的方式,然后将合并得到的newValue赋值给原先的key。
使用场景:
这个使用场景相对来说还是比较多的,比如分组求和这类的操作,虽然stream中有相关groupingBy()方法,但如果你想在循环中做一些其他操作的时候,merge()还是一个挺不错的选择的的。
2.compute()
compute()可以这么理解:其返回值是计算后得到的新值:
源码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17default V compute(K key,BiFunction<? super K, ? super V, ? extends V> remappingFunction){ Objects.requireNonNull(remappingFunction); V oldValue = this.get(key); V newValue = rrmappingFunction.apply(key,oldValue); if(newValue == null){ if(oldValue == null && !this.containsKey(key)){ return null; }else{ this.remove(key); return null; } }else{ this.put(key,newValue); return newValue; } }
最后
以上就是直率秀发最近收集整理的关于【Java8】Map骚操作,你都懂了吗的全部内容,更多相关【Java8】Map骚操作内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复