我是靠谱客的博主 直率秀发,最近开发中收集的这篇文章主要介绍【Java8】Map骚操作,你都懂了吗,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

总所周知,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骚操作,你都懂了吗所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(88)

评论列表共有 0 条评论

立即
投稿
返回
顶部