Rumah > Java > javaTutorial > Mengapa Collectors.toMap Melemparkan NullPointerException Apabila Nilainya Nol?

Mengapa Collectors.toMap Melemparkan NullPointerException Apabila Nilainya Nol?

Susan Sarandon
Lepaskan: 2024-11-10 15:32:03
asal
526 orang telah melayarinya

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

NullPointerException dalam Collectors.toMap with Null Entry Values

Collectors.toMap membuang NullPointerException apabila salah satu nilai adalah nol. Tingkah laku ini mengejutkan kerana peta boleh mengandungi nilai nol tanpa sebarang masalah. Mengapakah sekatan ini dikenakan untuk Collectors.toMap?

Sebab sekatan ini ialah Collectors.toMap menggunakan HashMap secara dalaman. HashMaps tidak membenarkan nilai nol untuk kunci, tetapi ia membenarkan nilai nol untuk nilai. Walau bagaimanapun, Collectors.toMap menganggap bahawa semua nilai adalah bukan nol, dan ia membuang NullPointerException jika andaian ini dilanggar.

Java 8 tidak menyediakan cara yang baik untuk menyelesaikan masalah ini. Anda boleh sama ada kembali kepada gelung lama biasa atau gunakan penyelesaian seperti di bawah:

Map<Integer, Boolean> collect = list.stream()
        .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
Salin selepas log masuk

Penyelesaian ini menggunakan pembina HashMap yang mengambil pembekal sebagai hujah. Pembekal digunakan untuk membuat contoh peta baharu jika strim kosong. Dalam kes ini, pembekal mencipta HashMap baharu dengan kapasiti lalai 16 dan faktor beban 0.75.

Penyelesaian kemudian menggunakan kaedah putAll untuk menambah semua elemen daripada strim ke peta. Kaedah putAll menggabungkan elemen daripada strim ke dalam peta, menggantikan mana-mana elemen sedia ada dengan kunci yang sama.

Penyelesaian ini tidak sebersih kaedah Collectors.toMap, tetapi ia berfungsi. Ia juga mengekalkan susunan unsur dalam strim, yang tidak dilakukan oleh Collectors.toMap.

Atas ialah kandungan terperinci Mengapa Collectors.toMap Melemparkan NullPointerException Apabila Nilainya Nol?. 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