Rumah  >  Artikel  >  Java  >  Mengapa Collectors.toMap Melemparkan NullPointerException untuk Nilai Null?

Mengapa Collectors.toMap Melemparkan NullPointerException untuk Nilai Null?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-11 13:44:03199semak imbas

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

Nilai Null dalam Collectors.toMap: Penjelasan dan Penyelesaian Java 8

Kaedah Java 8's Collectors.toMap membuang NullPointerException apabila ia menemui null nilai sebagai hujah kedua, walaupun peta membenarkan nilai nol sebagai nilai. Gelagat pelik ini telah mencetuskan kekeliruan dalam kalangan pembangun.

Sebab Di Sebalik Gelagat

Sebab asas bagi gelagat ini ialah pepijat yang diketahui dalam pelaksanaan OpenJDK Collectors.toMap. Kaedah ini cuba menggabungkan nilai semasa dan baharu untuk kunci yang diberikan menggunakan operasi HashMap.merge. Walau bagaimanapun, operasi ini tidak mengendalikan nilai nol dengan anggun, mengakibatkan pengecualian.

Penyelesaian Java 8

Untuk menyelesaikan isu ini, anda boleh menggunakan pendekatan berikut :

Peta collect = list.stream().collect(HashMap::new, (m, v) -> m.put(v.getId(), v.getAnswer()), HashMap::putAll);

Kod ini mencipta HashMap baharu dan menggunakan pengumpul tersuai untuk mengisinya dengan menggunakan kaedah put secara langsung. Pendekatan ini membenarkan nilai nol ditambah.

Pertimbangan Lain

Tidak seperti Collectors.toMap, penyelesaian yang disediakan akan menggantikan nilai secara senyap jika kunci yang sama muncul beberapa kali. Jika ini tidak diingini, anda mungkin ingin mempertimbangkan penyelesaian alternatif yang disediakan dalam bahagian komen.

Dengan memahami sebab di sebalik NullPointerException dan menggunakan penyelesaian, anda boleh mengendalikan nilai nol dengan berkesan apabila menggunakan Collectors.toMap.

Atas ialah kandungan terperinci Mengapa Collectors.toMap Melemparkan NullPointerException untuk Nilai Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn