-
Bug
-
Resolution: Duplicate
-
P3
-
17
-
None
$ cat CollectToMap.java
import java.util.Collections;
import java.util.stream.Collectors;
public class CollectToMap {
public static void main(String[] args) {
Collections.singleton(null)
.stream()
.collect(Collectors.toMap(k -> new Object(), v -> null));
}
}
$ javac CollectToMap.java
$ java CollectToMap
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:208)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.Collections$2.tryAdvance(Collections.java:4820)
at java.base/java.util.Collections$2.forEachRemaining(Collections.java:4828)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at CollectToMap.main(CollectToMap.java:9)
----------------------
This is unexpected because neither Stream.collect nor Collectors.toMap mentions this. This is also surprising as null key is okay:
$ cat CollectToMap.java
import java.util.Collections;
import java.util.stream.Collectors;
public class CollectToMap {
public static void main(String[] args) {
Collections.singleton(null)
.stream()
.collect(Collectors.toMap(k -> null, v -> new Object()));
}
}
$ javac CollectToMap.java
$ java CollectToMap
$
import java.util.Collections;
import java.util.stream.Collectors;
public class CollectToMap {
public static void main(String[] args) {
Collections.singleton(null)
.stream()
.collect(Collectors.toMap(k -> new Object(), v -> null));
}
}
$ javac CollectToMap.java
$ java CollectToMap
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:208)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180)
at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.base/java.util.Collections$2.tryAdvance(Collections.java:4820)
at java.base/java.util.Collections$2.forEachRemaining(Collections.java:4828)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at CollectToMap.main(CollectToMap.java:9)
----------------------
This is unexpected because neither Stream.collect nor Collectors.toMap mentions this. This is also surprising as null key is okay:
$ cat CollectToMap.java
import java.util.Collections;
import java.util.stream.Collectors;
public class CollectToMap {
public static void main(String[] args) {
Collections.singleton(null)
.stream()
.collect(Collectors.toMap(k -> null, v -> new Object()));
}
}
$ javac CollectToMap.java
$ java CollectToMap
$
- duplicates
-
JDK-8261865 Unexpected NullPointerException from Collectors.toMap
-
- Open
-
- relates to
-
JDK-8040892 Incorrect message in Exception thrown by Collectors.toMap(Function,Function)
-
- Closed
-