Collectors.toMap メソッドは、Java 8 の Stream API の強力なユーティリティであり、以下を提供します。オブジェクトのストリームをマップに変換する簡潔な方法。ただし、マップ エントリとして null 値を組み込もうとすると、ユーザーは不可解な NullPointerException に遭遇する可能性があります。
マップではエントリとして null 値が許可されているにもかかわらず、Collectors.toMap は、次のいずれかの場合に NullPointerException をスローします。ストリーム内の値は null です。この動作は直観に反しているように見え、開発者にとって混乱の原因となる可能性があるため、懸念が生じます。
この例外は、内部で HashMap を使用する Collectors.toMap の特定の実装によって発生します。 HashMap の内部動作により、エントリの null 値を処理できません。 null 値が発生すると、HashMap は NullPointerException をスローします。
この問題に対処するための回避策には、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 サイトの他の関連記事を参照してください。