为什么HashMap合并正在对值进行空值检查。 HashMap支持null键和null值。所以有人可以告诉为什么需要对合并进行null检查?
@Override
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();
由于这个原因,我无法使用Collectors.toMap(Function.identity(), this::get)
来收集地图中的值
答案 0 :(得分:0)
作为上述toMap
和merge
中具有空值的问题的解决方法
您可以尝试通过以下方式使用自定义收集器:
public static <T, R> Map<T, R> mergeTwoMaps(final Map<T, R> map1,
final Map<T, R> map2,
final BinaryOperator<R> mergeFunction) {
return Stream.of(map1, map2).flatMap(map -> map.entrySet().stream())
.collect(HashMap::new,
(accumulator, entry) -> {
R value = accumulator.containsKey(entry.getKey())
? mergeFunction.apply(accumulator.get(entry.getKey()), entry.getValue())
: entry.getValue();
accumulator.put(entry.getKey(), value);
},
HashMap::putAll);
}