1.問題
今日、Collectors.toを使用しているときにNPEに遭遇しました。これは、Hashmapのキー値がnullになる可能性があるのは当然のことであり、そうではないはずです...
ログを調べたところ、マップ内のキーと値のペアの値がnullであり、Collectors.toMapを呼び出すとNullPointerExceptionが報告されたことがわかりました。
2.分析
クリックしてソースコードを表示します。
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.ソリューション
次の形式で書くことができます:
Map<String, String> resultMap = map.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(),
entry -> Optional.ofNullable(entry.getValue()).orElse("")));
复制代码
Collectors.toMapを使用する際に覚えておくべきいくつかのポイントがあります:
1。キーを繰り返すことはできません。そうしないと、マップのキーを繰り返すことができないため、エラーが報告されます
。2.値を空にすることはできません。そうしないと、nullポインターが発生します。報告される