使用可选的空检查

Null check using Optional

我想在 JDK8 中使用 Optional 实用程序执行 null 检查。这是我正在编写的代码,它给我一个错误:

java.util.Optional stringToUse = java.util.Optional.of(childPage.getContentResource().getValueMap().get("jcr:description").toString());
stringToUse.ifPresent(description = stringToUse);

此处"jcr:description"可以存在也可以不存在。如果它存在,我想在描述变量中使用该值,如果为空,则只需设置空白字符串进行描述。也可以在这里使用 Lambda 表达式吗?谢谢

如果get("jcr:description")的结果可以是null,你不应该调用toString(),因为没有什么,Optional可以做,如果使用前的操作已经失败并显示 NullPointerException.

你想要的,可以通过以下方式实现:

Optional<String> stringToUse = Optional.ofNullable(
    childPage.getContentResource().getValueMap().get("jcr:description")
).map(Object::toString);

那你可以把它当作

if(stringToUse.isPresent())
    description = stringToUse.get();

如果“什么都不做”是针对不存在的值的预期操作。或者您可以为该案例指定回退值:

description = stringToUse.orElse("");

那么,description 总是被赋值,要么用 jcr:description 的字符串表示,要么用一个空字符串。

可以使用stringToUse.ifPresent(string -> description = string);,如果description不是局部变量,而是字段。不过我不推荐。