![](/img/trans.png)
[英]is create a class variable just to be used in Optional.ifPresentOrElse a practice to be avoid?
[英]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.