Heim > Java > javaLernprogramm > Hauptteil

Warum löst Collectors.toMap eine NullPointerException aus, wenn die Werte Null sind?

Susan Sarandon
Freigeben: 2024-11-10 15:32:03
Original
461 Leute haben es durchsucht

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

NullPointerException in Collectors.toMap mit Null-Eintragswerten

Collectors.toMap löst eine NullPointerException aus, wenn einer der Werte null ist. Dieses Verhalten ist überraschend, da Karten problemlos Nullwerte enthalten können. Warum gilt diese Einschränkung für Collectors.toMap?

Der Grund für diese Einschränkung ist, dass Collectors.toMap intern eine HashMap verwendet. HashMaps erlauben keine Nullwerte für Schlüssel, aber sie erlauben Nullwerte für Werte. Collectors.toMap geht jedoch davon aus, dass alle Werte ungleich Null sind, und löst eine NullPointerException aus, wenn diese Annahme verletzt wird.

Java 8 bietet keine gute Möglichkeit, dieses Problem zu beheben. Sie können entweder zu einer einfachen alten for-Schleife zurückkehren oder eine Problemumgehung wie die folgende verwenden:

Map<Integer, Boolean> collect = list.stream()
        .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
Nach dem Login kopieren

Diese Problemumgehung verwendet einen HashMap-Konstruktor, der einen Lieferanten als Argument verwendet. Der Lieferant wird verwendet, um eine neue Karteninstanz zu erstellen, wenn der Stream leer ist. In diesem Fall erstellt der Lieferant eine neue HashMap mit einer Standardkapazität von 16 und einem Auslastungsfaktor von 0,75.

Die Problemumgehung verwendet dann die putAll-Methode, um alle Elemente aus dem Stream zur Karte hinzuzufügen. Die putAll-Methode führt die Elemente aus dem Stream in der Karte zusammen und ersetzt alle vorhandenen Elemente mit demselben Schlüssel.

Diese Problemumgehung ist nicht so sauber wie die Collectors.toMap-Methode, funktioniert aber. Außerdem bleibt die Reihenfolge der Elemente im Stream erhalten, was Collectors.toMap nicht tut.

Das obige ist der detaillierte Inhalt vonWarum löst Collectors.toMap eine NullPointerException aus, wenn die Werte Null sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage