java map 空指针异常_Java8使用Collectors toMap,当value为null时报空指针异常
罪魁禍首就是HashMap的merge方法了,它的第一行就是這個:
if (value == null)
throw new NullPointerException();
復(fù)制代碼
為什么會調(diào)merge方法呢,toMap方法調(diào)的
public static >
Collector toMap(Function super T, ? extends K> keyMapper,
Function super T, ? extends U> valueMapper,
BinaryOperator mergeFunction,
Supplier mapSupplier) {
BiConsumer accumulator
= (map, element) -> map.merge(keyMapper.apply(element),
valueMapper.apply(element), mergeFunction);
return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
}
復(fù)制代碼
那么怎么解決呢?
既然時merge方法造成的,那就不調(diào)merge方法。
我們用自己定義的accumulator,用Stream的另一個collect方法
R collect(Supplier supplier,
BiConsumer accumulator,
BiConsumer combiner);
復(fù)制代碼
這個方法上面的注釋寫了一段這個, 前兩個參數(shù)干什么用的就很清楚了,第三個參數(shù)時并行計算用來組合結(jié)果的,所以用HashMap的putAll就好了
R result = supplier.get();
for (T element : this stream)
accumulator.accept(result, element);
return result;
復(fù)制代碼
所以解決辦法的代碼大概就是這樣的
params.stream().collect(LinkedHashMap::new, (m, v) -> m.put(v.getParam(), v.getParamValue()), LinkedHashMap::putAll);
復(fù)制代碼
據(jù)說這個問題java9就修復(fù)了,所以也可以嘗試升級jdk
總結(jié)
以上是生活随笔為你收集整理的java map 空指针异常_Java8使用Collectors toMap,当value为null时报空指针异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大军谈谈大数据
- 下一篇: Java中日期格式化字符串大小写区别YY