Collectors.toMap の Null 値: 説明と Java 8 の解決策
Java 8 の Collectors.toMap メソッドは、null を検出すると NullPointerException をスローしますマップでは値として null 値が許可されているにもかかわらず、値を 2 番目の引数として使用します。この奇妙な動作は、開発者の間で混乱を引き起こしました。
動作の背後にある理由
この動作の根本的な理由は、Collectors.toMap の OpenJDK 実装の既知のバグです。このメソッドは、HashMap.merge オペレーションを使用して、指定されたキーの現在値と新しい値をマージしようとします。ただし、この操作では null 値が適切に処理されないため、例外が発生します。
Java 8 ソリューション
この問題を回避するには、次のアプローチを使用できます。 :
マップ collect = list.stream().collect(HashMap::new, (m, v) -> m.put(v.getId(), v.getAnswer()), HashMap::putAll);
このコードは新しい HashMap を作成し、カスタム コレクターを使用して put メソッドを直接呼び出してデータを設定します。このアプローチでは、null 値を追加できます。
その他の考慮事項
Collectors.toMap とは異なり、提供されるソリューションは、同じキーが複数回出現する場合に、黙って値を置き換えます。これが望ましくない場合は、コメント セクションで提供されている代替ソリューションを検討してください。
NullPointerException の背後にある理由を理解し、回避策を使用することで、Collectors.toMap を使用するときに null 値を効果的に処理できます。
以上がCollectors.toMap が Null 値に対して NullPointerException をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。