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);
}
复制代码
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