1 背景
在java8之前没有merge,向map添加新元素比较复杂,需要判断是否为空:
val map = new HashMap<String, Integer>();
val prev = map.get("test");
if (prev == null) {
map.put("test", 1);
} else {
map.put("test", prev + 1);
}
2 merge
使用merge之后的代码:
val map = new HashMap<String, Integer>();
map.merge("test", 1, Integer::sum);
3 整理
- K key:插入的key
- V value:插入的value,value为null时,删除key
- BiFunction<? super V, ? super V, ? extends V> remappingFunction:
(oldValue, newValue) -> mergeValue
default V merge(K key, V value,
BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
Objects.requireNonNull(remappingFunction);
Objects.requireNonNull(value);
V oldValue = get(key);
V newValue = (oldValue == null) ? value :
remappingFunction.apply(oldValue, value);
if(newValue == null) {
remove(key);
} else {
put(key, newValue);
}
return newValue;
}