Null エントリ値を処理するときに Collectors.toMap が NullPointerException をスローするのはなぜですか?

Patricia Arquette
リリース: 2024-11-11 06:10:03
オリジナル
411 人が閲覧しました

Why Does Collectors.toMap Throw a NullPointerException When Handling Null Entry Values?

Null エントリ値を含む Collectors.toMap の NullPointerException

概要

Collectors.toMap メソッドは、Java 8 の Stream API の強力なユーティリティであり、以下を提供します。オブジェクトのストリームをマップに変換する簡潔な方法。ただし、マップ エントリとして null 値を組み込もうとすると、ユーザーは不可解な NullPointerException に遭遇する可能性があります。

問題ステートメント

マップではエントリとして null 値が許可されているにもかかわらず、Collectors.toMap は、次のいずれかの場合に NullPointerException をスローします。ストリーム内の値は null です。この動作は直観に反しているように見え、開発者にとって混乱の原因となる可能性があるため、懸念が生じます。

原因

この例外は、内部で HashMap を使用する Collectors.toMap の特定の実装によって発生します。 HashMap の内部動作により、エントリの null 値を処理できません。 null 値が発生すると、HashMap は NullPointerException をスローします。

Java 8 ソリューション

この問題に対処するための回避策には、HashMap を手動で作成し、それにストリームの要素を設定することが含まれます。これは、次のコードを使用して実現できます。

Map<Integer, Boolean> collect = list.stream()
        .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
ログイン後にコピー

このコードは、NullPointerException を回避しながら、Collectors.toMap の機能を効果的にシミュレートします。このソリューションでは、重複キーが存在する場合に値が自動的に置き換えられる可能性があることに注意してください。

結論

Collectors.toMap および null 値で発生する NullPointerException は、OpenJDK 実装の既知の問題です。提供されている回避策により、開発者はこの方法を引き続き使用できますが、その制限と潜在的な落とし穴を理解することが重要です。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート