Kaedah Collectors.toMap, utiliti berkuasa dalam Java 8's Stream API, menyediakan cara ringkas untuk menukar aliran objek kepada peta. Walau bagaimanapun, pengguna mungkin menghadapi NullPointerException yang membingungkan apabila cuba memasukkan nilai nol sebagai entri peta.
Walaupun peta membenarkan nilai nol sebagai entri, Collectors.toMap membuang NullPointerException jika mana-mana nilai dalam aliran adalah batal. Tingkah laku ini menimbulkan kebimbangan kerana ia kelihatan berlawanan dengan intuisi dan boleh menjadi punca kekeliruan bagi pembangun.
Pengecualian ini disebabkan oleh pelaksanaan khusus Collectors.toMap, yang menggunakan HashMap secara dalaman. Disebabkan oleh kerja dalaman HashMap, ia tidak dapat mengendalikan nilai nol untuk entri. Apabila menemui nilai nol, HashMap membuang NullPointerException.
Untuk menangani isu ini, penyelesaian penyelesaian melibatkan penciptaan HashMap secara manual dan mengisinya dengan elemen strim. Ini boleh dicapai menggunakan kod berikut:
Map<Integer, Boolean> collect = list.stream() .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
Kod ini secara berkesan mensimulasikan kefungsian Collectors.toMap sambil mengelakkan NullPointerException. Ambil perhatian bahawa penyelesaian ini mungkin menggantikan nilai secara senyap jika kunci pendua hadir.
NullPointerException yang dihadapi dengan Collectors.toMap dan nilai null ialah isu yang diketahui dalam pelaksanaan OpenJDK. Walaupun penyelesaian yang disediakan membolehkan pembangun terus menggunakan kaedah ini, adalah penting untuk memahami batasan dan kemungkinan kesulitannya.
Atas ialah kandungan terperinci Mengapa Collectors.toMap Melemparkan NullPointerException Apabila Mengendalikan Nilai Kemasukan Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!