當使用jdk8的 stream() .collect(Collectors.toMap()時value爲空會報null指針異常

1.當使用jdk8的 stream() .collect(Collectors.toMap()時value爲空會報null指針異常。
Map<String, Object> dataMap = JSONObject.parseObject(cfg.getData(), new TypeReference<Map<String, Object>>() {
});
Map<String, Object> resultData = new LinkedHashMap<>();


resultData = variableNames.stream()
                          .collect(Collectors.toMap(x -> x,
                                                    x -> dataMap.getOrDefault(x, null),
                                                    (x, y) -> y,
                                                    LinkedHashMap::new));

result.add(resultData);

 

- ApiController.configData: exception fail
java.lang.NullPointerException: null
    at java.util.HashMap.merge(HashMap.java:1225)
    at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
    at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)

主要hashmap 的merge方法加了判null 直接拋異常


解決辦法 :

1.

// for (String variableName : variableNames) {
//     // if (!dataMap.containsKey(variableName) || Objects.isNull(dataMap.get(variableName))) {
//     //     continue;
//     // }
//     Object value = dataMap.getOrDefault(variableName, null);
//     resultData.put(variableName, value);
// }

2.可以參考:

https://blog.csdn.net/qq_31086797/article/details/106649290

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章