ホームページ  >  記事  >  Java  >  Collectors.toMap() がエントリ値が null の NullPointerException をスローするのはなぜですか?

Collectors.toMap() がエントリ値が null の NullPointerException をスローするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-11 11:46:03599ブラウズ

Why does Collectors.toMap() throw a NullPointerException with null entry values?

Collectors.toMap() で Null エントリ値を持つ NullPointerException

Collectors.toMap() を利用してオブジェクトのストリームをマップに変換しようとすると、NullPointerException が発生するストリーム内の 1 つ以上の値が null の場合に発生する可能性があります。マップが null 値を保持できることを考えると、この動作は直観に反しているように思えるかもしれません。

この例外は、OpenJDK の既知のバグが原因で発生します。この問題を軽減するには、次の回避策があります。

Map<Integer, Boolean> collect = list.stream()
        .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);

このアプローチは洗練されたものではありませんが、問題を効果的に解決します。結果のマップには、ストリームのキーと値のペア (null 値も含む) が含まれます。

この回避策には制限があることに注意してください。ストリームに異なる値を持つ重複キーが含まれている場合、マップは既存のキーをサイレントに置き換えます。新しいものでの価値。これに対処するには、コメントセクションにあるリンクを参照してください。

以上がCollectors.toMap() がエントリ値が null の NullPointerException をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。