Heim  >  Artikel  >  Java  >  Warum löst Collectors.toMap() eine NullPointerException mit Null-Eintragswerten aus?

Warum löst Collectors.toMap() eine NullPointerException mit Null-Eintragswerten aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-11 11:46:03599Durchsuche

Why does Collectors.toMap() throw a NullPointerException with null entry values?

NullPointerException in Collectors.toMap() mit Null-Eintragswerten

Beim Versuch, Collectors.toMap() zu verwenden, um einen Objektstrom in eine Karte umzuwandeln, tritt eine NullPointerException auf kann auftreten, wenn einer oder mehrere Werte im Stream null sind. Dieses Verhalten mag kontraintuitiv erscheinen, wenn man bedenkt, dass Karten Nullwerte speichern können.

Diese Ausnahme tritt aufgrund eines bekannten Fehlers in OpenJDK auf. Um dieses Problem zu entschärfen, steht eine Problemumgehung zur Verfügung:

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

Obwohl nicht elegant, löst dieser Ansatz das Problem effektiv. Die resultierende Karte enthält die Schlüssel-Wert-Paare aus dem Stream, einschließlich aller Nullwerte.

Beachten Sie, dass diese Problemumgehung eine Einschränkung hat: Wenn der Stream doppelte Schlüssel mit unterschiedlichen Werten enthält, ersetzt die Karte stillschweigend die vorhandenen Wert mit dem neuen. Um dieses Problem zu beheben, klicken Sie auf den Link im Kommentarbereich.

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!

Stellungnahme:
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