首頁 >Java >java教程 >為什麼 Collectors.toMap 會針對 Null 值拋出 NullPointerException?

為什麼 Collectors.toMap 會針對 Null 值拋出 NullPointerException?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-11 13:44:03261瀏覽

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

Collectors.toMap 中的Null 值:解釋和Java 8 解決方案

Java 8 的Collectors.toMap 方法在遇到null 時在遇到null 時拋出NullPointerException儘管映射允許使用null 值作為值,但value 作為其第二個參數。這種奇怪的行為引起了開發人員的困惑。

行為背後的原因

此行為的根本原因是 Collectors.toMap 的 OpenJDK 實作中的已知錯誤。此方法嘗試使用 HashMap.merge 操作合併給定鍵的目前值和新值。但是,此操作無法正常處理 null 值,從而導致異常。

Java 8 解

要解決此問題,您可以使用以下方法:

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

此程式碼建立一個新的 HashMap,並使用自訂收集器透過直接呼叫 put 方法來填入它。這種方法允許添加空值。

其他注意事項

與 Collectors.toMap 不同,如果同一鍵出現多次,提供的解決方案將默默地替換值。如果不需要,您可能需要考慮評論部分中提供的替代解決方案。

透過了解 NullPointerException 背後的原因並使用解決方法,您可以在使用 Collectors.toMap 時有效處理 null 值。

以上是為什麼 Collectors.toMap 會針對 Null 值拋出 NullPointerException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn