一、问题
今天在使用Collectors.to时遇到一个NPE,按理说Hashmap的key value都可以为null,不应该啊...
看了一下日志发现Map中有个键值对的value为null,在调用Collectors.toMap时报了NullPointerException
二、分析
点开看看源码:
public static <T, K, U, M extends Map<K, U>>
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier) {
BiConsumer<M, T> accumulator
= (map, element) ->** map.merge**(keyMapper.apply(element),
valueMapper.apply(element), mergeFunction);
return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
}
三、解决方法
写成这样的格式就可以了:
Map<String, String> resultMap = map.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(),
entry -> Optional.ofNullable(entry.getValue()).orElse("")));
在使用Collectors.toMap时需要记住几点:
1、key不能有重复,否则会报错,因为Map的key不能重复
2、value不能为空,否则报空指针