java8ストリームストリームCollectors.toMap値は、NPEを報告するために空です

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

image.png

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ポインターが発生します。報告される

おすすめ

転載: juejin.im/post/7078501237196324894
おすすめ