java8, optional.orElse() 不工作但 optional.orElseGet() 工作

Loc*_* Le 2 java-8

这是我的代码:

return repository.findFirstByFxDateAndTransCurrAndCrdhldBillCurr(
            LocalDate.parse(request.getDate()), request.getTransactionCurrency(), request.getBillingCurrency())
            .orElse(getCurrencyExchangeRateFromApi(request));
Run Code Online (Sandbox Code Playgroud)

它不起作用,但我将 .orElse 更新为 .orElseGet

return repository.findFirstByFxDateAndTransCurrAndCrdhldBillCurr(
            LocalDate.parse(request.getDate()), request.getTransactionCurrency(), request.getBillingCurrency())
            .orElseGet(() -> getCurrencyExchangeRateFromApi(request));
Run Code Online (Sandbox Code Playgroud)

它工作完美,我不知道原因,是java8的错误吗?

我尝试再次运行多次,没有任何变化,但我尝试编写一个小示例,可选的 String 而不是来自存储库,也可以。

Era*_*ran 5

.orElse(getCurrencyExchangeRateFromApi(request)),getCurrencyExchangeRateFromApi(request)始终执行(无论 是否Optional为空)。

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

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