ホームページ  >  記事  >  Java  >  Collectors.toMap が Null 値に対して NullPointerException をスローするのはなぜですか?

Collectors.toMap が Null 値に対して NullPointerException をスローするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-11 13:44:03200ブラウズ

Why Does Collectors.toMap Throw a NullPointerException for Null Values?

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 サイトの他の関連記事を参照してください。

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