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