Collectors.toMap中的Java 8 NullPointerException
如果其中一个值为'null' ,Java 8 Collectors.toMap
将抛出一个NullPointerException
。我不明白这种行为,map可以包含null指针作为值而没有任何问题。有没有一个很好的理由为什么值不能为空Collectors.toMap
?
另外,是否有一个很好的Java 8方法来修复它,或者我应该恢复到普通的旧循环?
我的问题的一个例子:
import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;class Answer { private int id; private Boolean answer; Answer() { } Answer(int id, Boolean answer) { this.id = id; this.answer = answer; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Boolean getAnswer() { return answer; } public void setAnswer(Boolean answer) { this.answer = answer; }}public class Main { public static void main(String[] args) { List<Answer> answerList = new ArrayList<>(); answerList.add(new Answer(1, true)); answerList.add(new Answer(2, true)); answerList.add(new Answer(3, null)); Map<Integer, Boolean> answerMap = answerList .stream() .collect(Collectors.toMap(Answer::getId, Answer::getAnswer)); }}
堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException at java.util.HashMap.merge(HashMap.java:1216) at java.util.stream.Collectors.lambda$toMap$168(Collectors.java:1320) at java.util.stream.Collectors$$Lambda$5/1528902577.accept(Unknown Source) at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1359) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
这个问题在Java 11中仍然存在。
摇曳的蔷薇
相关分类