Rumah > Java > javaTutorial > teks badan

Mengapa Collectors.toMap Melemparkan NullPointerException Apabila Mengendalikan Nilai Kemasukan Null?

Patricia Arquette
Lepaskan: 2024-11-11 06:10:03
asal
410 orang telah melayarinya

Why Does Collectors.toMap Throw a NullPointerException When Handling Null Entry Values?

NullPointerException dalam Collectors.toMap dengan Nilai Kemasukan Null

Pengenalan

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.

Pernyataan Masalah

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.

Punca

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.

Penyelesaian Java 8

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);
Salin selepas log masuk

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.

Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan