public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper) {
return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
}
进去,toMap, 点击进入merge:
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;
}
这里抛出异常:
Objects.requireNonNull(value);
大概率分析:因为 ConcurrentHashMap不允许key, value为null。这里没做任何区别,所以,做了兼容。
Map | Key为null | Value为null |
---|---|---|
ConcurrentHashMap | 不允许 | 不允许 |
TreeMap | 不允许 | 允许 |
HashMap | 允许 | 允许 |