NullPointerException Ditemui dalam Collectors.toMap with Null Entry Values
Pengenalan
Di Java 8 , Collectors.toMap ialah kaedah mudah untuk mencipta Peta daripada aliran pasangan kunci-nilai. Walau bagaimanapun, kaedah ini membuang NullPointerException jika salah satu nilai dalam aliran adalah batal. Ini kelihatan aneh, memandangkan Peta boleh mengandungi nilai nol tanpa sebarang isu.
Sebab Pengecualian Null
Sebab di sebalik gelagat ini ialah pelaksanaan lalai Pengumpul. toMap menggunakan HashMap sebagai struktur data asas. HashMaps tidak membenarkan nilai nol untuk kunci, tetapi ia membenarkan nilai nol untuk nilai. Walau bagaimanapun, apabila Collectors.toMap menemui nilai null untuk kunci, ia cuba menggunakan nilai lalai untuk nilai (iaitu null), dan ini menghasilkan NullPointerException.
Java 8 Solution
Untuk menyelesaikan isu ini dalam Java 8, kami boleh menggunakan penyelesaian yang melibatkan pembuatan HashMap dan mengisinya dengan pasangan nilai kunci daripada strim:
Map<Integer, Boolean> collect = list.stream() .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
Penyelesaian ini tidak begitu elegan, tetapi ia akan menghasilkan hasil yang dijangkakan: Peta yang mengandungi pasangan nilai kunci daripada strim, dengan nol nilai untuk sebarang kunci yang mempunyai nilai nol dalam strim.
Pertimbangan
Adalah penting untuk ambil perhatian bahawa penyelesaian ini mempunyai pertimbangan berikut:
Jika pertimbangan ini tidak boleh diterima untuk kes penggunaan anda, anda mungkin perlu mempertimbangkan pendekatan alternatif, seperti menggunakan pelaksanaan Pemungut yang berbeza atau berbalik kepada gelung lama biasa.
Atas ialah kandungan terperinci Mengapa Collectors.toMap Melemparkan NullPointerException dengan Nilai Kemasukan Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!