首页 > 解决方案 > 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 而不是来自存储库,也可以。

标签: java-8

解决方案


In .orElse(getCurrencyExchangeRateFromApi(request)),getCurrencyExchangeRateFromApi(request)总是被执行(不管 是否Optional为空)。

In .orElseGet(() -> getCurrencyExchangeRateFromApi(request)),getCurrencyExchangeRateFromApi(request)仅在Optional为空时执行。

如果“不工作”意味着您遇到了异常,那么您的getCurrencyExchangeRateFromApi(request)方法可能存在问题。


推荐阅读