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中仍然存在。
长风秋雁
摇曳的蔷薇
随时随地看视频慕课网APP
相关分类