概述
总所周知,Java8最大的特性就说更多的面向函数,比如引入了Lambda等,可以更好的进行函数式编程。
1.merge()
merge()可以这么理解:它将新的值赋值到key(如果不存在)或更新给定的key值对应的value。源码如下:
default 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()可以这么理解:其返回值是计算后得到的新值:
源码如下:
default 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骚操作,你都懂了吗所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复