Die Collectors.toMap-Methode, ein leistungsstarkes Dienstprogramm in der Stream-API von Java 8, bietet eine prägnante Möglichkeit, einen Objektstrom in eine Karte umzuwandeln. Benutzer können jedoch auf eine rätselhafte NullPointerException stoßen, wenn sie versuchen, Nullwerte als Karteneinträge zu integrieren.
Obwohl Karten Nullwerte als Einträge zulassen, löst Collectors.toMap eine NullPointerException aus, wenn einer der folgenden Punkte auftritt Werte im Stream sind null. Dieses Verhalten gibt Anlass zur Sorge, da es kontraintuitiv erscheint und für Entwickler Verwirrung stiften kann.
Diese Ausnahme wird durch die spezifische Implementierung von Collectors.toMap verursacht, die intern eine HashMap verwendet. Aufgrund der internen Funktionsweise von HashMap kann es keine Nullwerte für Einträge verarbeiten. Wenn ein Nullwert auftritt, löst die HashMap eine NullPointerException aus.
Um dieses Problem zu beheben, besteht eine Workaround-Lösung darin, manuell eine HashMap zu erstellen und sie mit den Elementen des Streams zu füllen. Dies kann mit dem folgenden Code erreicht werden:
Map<Integer, Boolean> collect = list.stream() .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
Dieser Code simuliert effektiv die Funktionalität von Collectors.toMap und vermeidet gleichzeitig die NullPointerException. Beachten Sie, dass diese Lösung Werte möglicherweise stillschweigend ersetzt, wenn doppelte Schlüssel vorhanden sind.
Die NullPointerException, die bei Collectors.toMap und Nullwerten auftritt, ist ein bekanntes Problem in der OpenJDK-Implementierung. Obwohl die bereitgestellte Problemumgehung es Entwicklern ermöglicht, diese Methode weiterhin zu verwenden, ist es wichtig, ihre Einschränkungen und potenziellen Fallstricke zu verstehen.
Das obige ist der detaillierte Inhalt vonWarum löst Collectors.toMap eine NullPointerException aus, wenn Null-Eintragswerte verarbeitet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!