首页 > 解决方案 > 可选的为空时从 Optional.ifPresentOrElse() 返回一个字符串?

问题描述

我正在尝试从 Optional 中获取一个值来创建一个字符串,但如果该值为空,则使用一个常量字符串(“未提供”)。有没有办法使用 ifPresentOrElse() 返回一个字符串常量?或者也许完全不同的电话?

final Optional<Integer> optAppId = Optional.ofNullable(appApiBean.getAppId());

...
// works, but long, clumsy, 
String appIdStr = optAppId.isPresent() ? optAppId.get().toString() : NA_OPTION;

// Second part fails, because it's not void
String appIdStr = optAppId.ifPresentOrElse(s -> s.toString(), () -> NA_OPTION);

我喜欢直接使用可选功能的想法,减少变量名的出现,更易读的代码等,我不想为整数引入标志值,比如'-1',这样我就可以使用 ifPresent()

想法?

标签: javaoptional

解决方案


ifPresentOrElse 根据可选项是否为空来执行操作,而不是评估一个值。

当可选项为空时,您可以使用它orElse来指定您想要的默认值。orElse如果它不是值,将返回可选的包装值,所以你应该首先map选择你想要的值:

String appIdStr = optAppId.map(Integer::toString).orElse(NA_OPTION);

如果您想要对默认值进行延迟评估,您也可以使用orElseGet,它需要一个Supplier

String appIdStr = optAppId.map(Integer::toString).orElseGet(() -> someExpensiveOperation());

推荐阅读