在检索值之前检查是否存在哈希映射键

时间:2017-10-19 18:59:22

标签: java

鉴于我正在检查我的hashmap如下

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);

在尝试检索值之前,如何检查密钥实际存在于我的hashmap中。目前我经常收到NullPointerException。

1 个答案:

答案 0 :(得分:2)

在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的情况下执行处理,则具有默认值是不合适的。

在此配置中,更好的解决方法是将OptionalifPresent()结合使用:

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());