java从映射中获取“null”值
我有HashMap:
Map<String, Object> second = new HashMap<>(Map.of("timeout", 20, "verbose", null, "host", "test"));
第二个映射没有空值。我把他们的。keyset()进行设置,然后开始解析。 当我试图解析它时:
if (firstMap.containsKey(s) && secondMap.containsKey(s) && !Objects.equals(firstMap.get(s), secondMap.get(s))) {
diffList.add(Map.of(s, "changed", "oldValue", firstMap.get(s), "newValue", secondMap.get(s)));
}
我得到NPE。我明白为什么,但我不明白我怎么能解决这个问题。我看到过类似的帖子,但对我没有帮助
Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:208)
at java.base/java.util.ImmutableCollections$MapN.<init>(ImmutableCollections.java:1186)
at java.base/java.util.Map.of(Map.java:1351)
at com.company.Main.main(Main.java:13)
# 1 楼答案
^{} 不允许
null
值。引用Javadoc:相反,您可以直接调用
put
# 2 楼答案
根据stacktrace,映射是ImmutableCollections,ImmutableCollections中不支持空值
https://docs.oracle.com/javase/9/core/creating-immutable-lists-sets-and-maps.htm#JSCOR-GUID-1222F8A3-7EC0-4E49-9B75-C3B263F9A1BB
# 3 楼答案
Map.of
既不允许null
键,也不允许null
值。如果我正确地获得了代码,您最终将处理键verbose
,它在您的映射中有一个null
值second
参考资料:
Javadoc Map.of
Immutable Map factory method
# 4 楼答案
地图。关于()和Map。ofEntries()静态工厂方法提供了一种创建不可变映射的方便方法。通过这些方法创建的地图实例具有以下特征:
。。。 它们不允许空键和值。尝试使用空键或值创建它们会导致NullPointerException