繁体   English   中英

选修的<integer>空时从 Optional.ifPresentOrElse() 返回一个字符串?</integer>

[英]Optional<Integer> return a string from Optional.ifPresentOrElse() when empty?

我试图从 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);

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

想法?

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

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

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

如果你想对默认值进行惰性评估,你也可以使用orElseGet ,它接受一个Supplier

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM