NullPointerException in Collectors.toMap mit Null-Eintragswerten aufgetreten
Einführung
In Java 8 Collectors.toMap ist eine praktische Methode zum Erstellen einer Map aus einem Strom von Schlüssel-Wert-Paaren. Diese Methode löst jedoch eine NullPointerException aus, wenn einer der Werte im Stream null ist. Das erscheint seltsam, wenn man bedenkt, dass Maps ohne Probleme Nullwerte enthalten können.
Grund für Null-Ausnahme
Der Grund für dieses Verhalten ist, dass die Standardimplementierung von Collectors. toMap verwendet eine HashMap als zugrunde liegende Datenstruktur. HashMaps erlauben keine Nullwerte für Schlüssel, aber sie erlauben Nullwerte für Werte. Wenn Collectors.toMap jedoch auf einen Nullwert für einen Schlüssel stößt, versucht es, den Standardwert für den Wert zu verwenden (der null ist), und dies führt zur NullPointerException.
Java 8-Lösung
Um dieses Problem in Java 8 zu beheben, können wir eine Problemumgehung verwenden, bei der manuell eine HashMap erstellt und diese mit den Schlüssel-Wert-Paaren aus dem Stream gefüllt wird:
Map<Integer, Boolean> collect = list.stream() .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
Dies Die Problemumgehung ist nicht besonders elegant, führt aber zum erwarteten Ergebnis: eine Map mit den Schlüssel-Wert-Paaren aus dem Stream, mit Nullwerten für alle Schlüssel, die im Stream Nullwerte hatten.
Überlegungen
Es ist wichtig zu beachten, dass diese Problemumgehung die folgenden Überlegungen beinhaltet:
Wenn diese Überlegungen für Ihren Anwendungsfall nicht akzeptabel sind, müssen Sie möglicherweise eine Alternative in Betracht ziehen Ansätze, wie die Verwendung einer anderen Collector-Implementierung oder die Rückkehr zu einer einfachen alten for-Schleife.
Das obige ist der detaillierte Inhalt vonWarum löst Collectors.toMap eine NullPointerException mit Null-Eintragswerten aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!