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 值。