最近在做题的时候突然发现一个奇怪的写法 使用了map中的merge()函数.具体用法 为如果我们统计某个数组内字符串出现的次数,我们可能会这么写来统计字符出现的次数。
String[] nums={"1","1","2","3","3","4","5"};
HashMap<String,Integer> map=new HashMap<>();
for(String num:nums){
map.put(num,map.getOrDefault(num,0)+1);
}
如果使用merge()方法 则可以改成,是不是少了很多,也清晰了很多。
for(String num:nums){
map.merge(num,1,Integer::sum);
}
那么merge 函数通过上面例子已经可以理解,通过传入判断key 是否存在,如果存在则使用被传递过来的function处理oldValue 和value 后获取的结果来进行赋值。否则直接用value赋值。且value 不能为空
public V merge(K key, V value,
BiFunction<? super V, ? super V, ? extends V> remappingFunction){
if (value == null)
throw new NullPointerException();
if (remappingFunction == null)
throw new NullPointerException();
......
}