是否使用merge方法的代码比较
不使用merge
Map
<Byte, Integer> counts
= new HashMap<>();
for (byte b
: bytes
) {
Integer count
= counts
.get(b
);
if (count
== null
) {
counts
.put(b
, 1);
} else {
counts
.put(b
, count
+ 1);
}
}
使用merge
Map
<Byte, Integer> counts
= new HashMap<>();
for (byte b
: bytes
) {
counts
.merge(b
, 1, Integer
::sum
);
}
merge源码
defaultV
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
;
}
该方法接收三个参数,一个 key 值,一个 value,一个 remappingFunction ,如果给定的key不存在,它就变成了 put(key, value) 。但是,如果 key 已经存在一些值,我们 remappingFunction 可以选择合并的方式,然后将合并得到的 newValue 赋值给原先的 key。
转载请注明原文地址:https://blackberry.8miu.com/read-32983.html