java-8 - java8, optional.orElse() 不工作但 optional.orElseGet() 工作
问题描述
这是我的代码:
return repository.findFirstByFxDateAndTransCurrAndCrdhldBillCurr(
LocalDate.parse(request.getDate()), request.getTransactionCurrency(), request.getBillingCurrency())
.orElse(getCurrencyExchangeRateFromApi(request));
它不起作用,但我将 .orElse 更新为 .orElseGet
return repository.findFirstByFxDateAndTransCurrAndCrdhldBillCurr(
LocalDate.parse(request.getDate()), request.getTransactionCurrency(), request.getBillingCurrency())
.orElseGet(() -> getCurrencyExchangeRateFromApi(request));
它工作完美,我不知道原因,是 java8 的错误吗?
我尝试再次运行多次,没有任何变化,但我尝试编写一个小示例,可选 String 而不是来自存储库,也可以。
解决方案
In .orElse(getCurrencyExchangeRateFromApi(request))
,getCurrencyExchangeRateFromApi(request)
总是被执行(不管 是否Optional
为空)。
In .orElseGet(() -> getCurrencyExchangeRateFromApi(request))
,getCurrencyExchangeRateFromApi(request)
仅在Optional
为空时执行。
如果“不工作”意味着您遇到了异常,那么您的getCurrencyExchangeRateFromApi(request)
方法可能存在问题。
推荐阅读
- protractor - 步骤定义正则表达式与黄瓜量角器框架
- html - 通过在悬停时添加边框来推送内部内容
- python - 熊猫数据框'[nan nan nan ... nan nan nan] 在轴中找不到'
- html - 使用 aria-label 面包屑时如何将 p 标签放在新行上?
- android - 在 Android/Kotlin 上使用 GSON 解析空值
- angular - mat-tab-group 子组件未显示
- delphi - 使用 IBLite 连接到 Android 上的 Interbase 远程实例不起作用
- mathjax - Mathjax 和talkyard 中的Siunitx 插件
- python - Pandas:如何将不完整的仅日期索引转换为小时索引
- go - 如何将 AWS 凭证传递给我的应用程序(Golang SDK)?