Heim  >  Artikel  >  Java  >  Warum löst Collectors.toMap eine NullPointerException für Nullwerte aus?

Warum löst Collectors.toMap eine NullPointerException für Nullwerte aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-11 13:44:03200Durchsuche

Why Does Collectors.toMap Throw a NullPointerException for Null Values?

Nullwerte in Collectors.toMap: Eine Erklärung und Java 8-Lösungen

Die Collectors.toMap-Methode von Java 8 löst eine NullPointerException aus, wenn sie auf null trifft Werte als zweites Argument, obwohl Karten Nullwerte als Werte zulassen. Dieses eigenartige Verhalten hat bei Entwicklern für Verwirrung gesorgt.

Grund für das Verhalten

Der zugrunde liegende Grund für dieses Verhalten ist ein bekannter Fehler in der OpenJDK-Implementierung von Collectors.toMap. Die Methode versucht, die aktuellen und neuen Werte für einen bestimmten Schlüssel mithilfe der HashMap.merge-Operation zusammenzuführen. Dieser Vorgang verarbeitet Nullwerte jedoch nicht ordnungsgemäß, was zu der Ausnahme führt.

Java 8-Lösung

Um dieses Problem zu umgehen, können Sie den folgenden Ansatz verwenden :

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

Dieser Code erstellt eine neue HashMap und verwendet einen benutzerdefinierten Collector, um sie zu füllen, indem er die Put-Methode direkt aufruft. Dieser Ansatz ermöglicht das Hinzufügen von Nullwerten.

Weitere Überlegungen

Im Gegensatz zu Collectors.toMap ersetzt die bereitgestellte Lösung Werte stillschweigend, wenn derselbe Schlüssel mehrmals vorkommt. Wenn dies nicht gewünscht ist, sollten Sie alternative Lösungen in Betracht ziehen, die im Kommentarbereich bereitgestellt werden.

Wenn Sie den Grund für die NullPointerException verstehen und die Problemumgehung verwenden, können Sie Nullwerte effektiv verarbeiten, wenn Sie Collectors.toMap verwenden.

Das obige ist der detaillierte Inhalt vonWarum löst Collectors.toMap eine NullPointerException für Nullwerte 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