El valor de java8 Stream Stream Collectors.toMap está vacío para informar NPE

1. Problemas

Hoy, me encontré con un NPE cuando usaba Collectors.to. Es lógico que el valor clave de Hashmap pueda ser nulo, lo que no debería ser...

Miré el registro y descubrí que el valor de un par clave-valor en el Mapa es nulo, y se informó una NullPointerException al llamar a Collectors.toMap

2. Análisis

Haga clic para ver el código fuente:

public static <T, K, U, M extends Map<K, U>>
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
                            Function<? super T, ? extends U> valueMapper,
                            BinaryOperator<U> mergeFunction,
                            Supplier<M> mapSupplier) {
    BiConsumer<M, T> accumulator
            = (map, element) ->** map.merge**(keyMapper.apply(element),
                                          valueMapper.apply(element), mergeFunction);
    return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
}
复制代码

imagen.png

3. Soluciones

Se puede escribir en este formato:

Map<String, String> resultMap = map.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(),
			entry -> Optional.ofNullable(entry.getValue()).orElse("")));
复制代码

Hay algunos puntos que debe recordar al usar Collectors.toMap:
1. La clave no se puede repetir; de lo contrario, se informará un error, porque la clave del mapa no se puede repetir
. 2. El valor no puede estar vacío, de lo contrario, aparecerá un puntero nulo. ser reportado

Supongo que te gusta

Origin juejin.im/post/7078501237196324894
Recomendado
Clasificación