在检索值之前检查哈希映射键是不是存在[重复]

Posted

技术标签:

【中文标题】在检索值之前检查哈希映射键是不是存在[重复]【英文标题】:Check if hash map key is present before retrieving value [duplicate]在检索值之前检查哈希映射键是否存在[重复] 【发布时间】:2018-03-31 21:52:03 【问题描述】:

鉴于我正在按如下方式检查我的哈希图

String firstName = map.get(UserDetail.FIRST_NAME);
String lastName = map.get(UserDetail.LAST_NAME);
String age = map.get(UserDetail.AGE);
double height = Double.parseDouble(map.get(UserDetail.HEIGHT)
double weight = Double.parseDouble(map.get(UserDetail.WEIGHT)
String email = map.get(UserDetail.EMAIL);

在尝试检索值之前,我将如何检查该键是否确实存在于我的哈希图中。目前我经常收到 NullPointerException。

【问题讨论】:

【参考方案1】:

在 Java 8 之前,您必须明确地进行检查:

String firstName = map.get(UserDetail.FIRST_NAME);

// null guard
if (firstName != null)
   // invoke a method on firstName 

在 Java 8 之后,您可以使用 Map.getOrDefault() 方法。

例如:

String firstName = map.getOrDefault(UserDetail.FIRST_NAME, "");

现在,在某些情况下,不适合使用默认值,因为您只想在该值包含在地图中并且也不是 null 时才进行处理。

在此配置中,解决此问题的更好方法是使用 Optional 结合 ifPresent()

Optional<String> optional = Optional.of(map.get(UserDetail.FIRST_NAME));
optional.ifPresent((s)->myProcessing());

如果使用过一次,你也可以内联Optional

Optional.of(map.get(UserDetail.FIRST_NAME))
        .ifPresent((s)->myProcessing());

【讨论】:

以上是关于在检索值之前检查哈希映射键是不是存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查当前 URL 是不是包含哈希 [重复]

即使未定义,也检查嵌套键是不是存在[重复]

如何检查哈希中是不是存在特定键?

检查 Presto 值映射中是不是存在键

Python序列结构--字典

如何检查javascript中的对象中是不是存在键[重复]