当toMap存储空值时,java stream会抛出NPE

时间:2017-04-25 09:35:42

标签: java-8

HashMap允许存储NULL值,但Stream.toMap(r-> r.getName(), r->r.get(obj))会在r.get(obj)返回null时抛出NPE?我是否会遗漏某些内容或Stream有特殊原因要比Map更加小心?我正在尝试使用反射和java8来实现(new ObjectMapper()).convertValue(obj, Obj.class);

1 个答案:

答案 0 :(得分:2)

Collector.toMap使用HashMap::merge来合并结果:

public V merge(K key, V value,
               BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
    if (value == null)
        throw new NullPointerException();
    if (remappingFunction == null)
        throw new NullPointerException();

因此它可以存储空值,但合并不允许它。

您可以使用forEach

进行解决
stream.forEach (
   r-> map.put(r.getName(), r.get(obj))
)