Java: HashMap.getOrDefault returns 空值
Java: HashMap.getOrDefault returns null value
我是 Java 的新手,来自 Python 和 C#背景。我不知道为什么我得到 HashMap.getOrDefault()
的 null
值,根据我的理解,首先构建此方法是为了避免 NullPointer 异常。 people
对象不为空,idKey
.
也不为空
当找不到密钥时,getOrDefault()
将return默认值,根据documentation。
如果找到密钥但值为 null
,则 null
将被 returned。
所以,看来你的map中确实包含了key,但是对应的值为null。
HashMap.getOrDefault()
returns 键映射到的值,如果没有映射则为默认值。在您的情况下,唯一的解释是 idKey
出现在 people
中并映射到 null
.
如下代码returnsnull
:
java.util.Map<String, String> map = new java.util.HashMap<>();
map.put("foo", null);
return map.getOrDefault("foo", "bar");
如果删除 put
调用,您将获得 bar
。
正如@TasosP 已经提到的,您的地图很可能包含一个 null
值。你可以这样处理:
int itemId = Optional.ofNullable(people.get(idKey))
.map(Object::toString)
.map(Integer::parseInt)
.orElse(0);
上面的代码片段将处理缺失值和 null
值。
我是 Java 的新手,来自 Python 和 C#背景。我不知道为什么我得到 HashMap.getOrDefault()
的 null
值,根据我的理解,首先构建此方法是为了避免 NullPointer 异常。 people
对象不为空,idKey
.
当找不到密钥时,getOrDefault()
将return默认值,根据documentation。
如果找到密钥但值为 null
,则 null
将被 returned。
所以,看来你的map中确实包含了key,但是对应的值为null。
HashMap.getOrDefault()
returns 键映射到的值,如果没有映射则为默认值。在您的情况下,唯一的解释是 idKey
出现在 people
中并映射到 null
.
如下代码returnsnull
:
java.util.Map<String, String> map = new java.util.HashMap<>();
map.put("foo", null);
return map.getOrDefault("foo", "bar");
如果删除 put
调用,您将获得 bar
。
正如@TasosP 已经提到的,您的地图很可能包含一个 null
值。你可以这样处理:
int itemId = Optional.ofNullable(people.get(idKey))
.map(Object::toString)
.map(Integer::parseInt)
.orElse(0);
上面的代码片段将处理缺失值和 null
值。