java - 可选的为空时从 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()
想法?
解决方案
ifPresentOrElse
根据可选项是否为空来执行操作,而不是评估一个值。
当可选项为空时,您可以使用它orElse
来指定您想要的默认值。orElse
如果它不是值,将返回可选的包装值,所以你应该首先map
选择你想要的值:
String appIdStr = optAppId.map(Integer::toString).orElse(NA_OPTION);
如果您想要对默认值进行延迟评估,您也可以使用orElseGet
,它需要一个Supplier
:
String appIdStr = optAppId.map(Integer::toString).orElseGet(() -> someExpensiveOperation());
推荐阅读
- c# - 使用 C++ 和 C# 模拟修改循环内的向量
- java - 方法引用如何在 Java 中解析
- google-apps-script - GSuite 附加组件 - Gmail 检测收件人电子邮件更改
- python - 下采样 wav 录制 python
- arrays - 想要在 React 中测试数组常量的大小
- javascript - 如何将 Vue.js 和 socket.io 代码从我的 HTML 文件传输到单独的组件?
- javascript - 使用 JS Fetch API 将数据发布到 asp 控制器
- ffmpeg - FFMPEG 旋转元数据有时顺时针,有时逆时针
- java - 地理围栏服务触发不触发
- azure - Azure:创建或更新虚拟机 AzureMolyVM1 时出错 - Azure 错误:SkuNotAvailable