java - 在检索值之前检查 HashMap 键是否存在

标签 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。

最佳答案

在 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, "");
<小时/>

现在,在某些情况下,使用默认值并不合适,因为您只想在该值包含在 map 中且不为 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());

关于java - 在检索值之前检查 HashMap 键是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837003/

相关文章:

java - 自定义 HTTP 方法在 Retrofit 2 中不起作用

java - Servlet文件上传

java - 查找后无法使用数据源

java - onDrawerOpened 抽屉导航并在抽屉导航上设置 textView

java - 如何从代码获取 Selenium 版本

java - 在 Java 中为线程池提供单独的微服务有意义吗?

java - 自定义单元测试结果

java - Spring boot FF4j ff4j-spring-boot-starter 不包括 swagger 文档

java - 如何从组合框中的数字列表向 JPanel 添加按钮

java - 受密码保护的 Excel 文件