Java 8 java8,可选.orElse()不工作,但可选.orElseGet()工作
这是我的代码:Java 8 java8,可选.orElse()不工作,但可选.orElseGet()工作,java-8,Java 8,这是我的代码: return repository.findFirstByFxDateAndTransCurrAndCrdhldBillCurr( LocalDate.parse(request.getDate()), request.getTransactionCurrency(), request.getBillingCurrency()) .orElse(getCurrencyExchangeRateFromApi(request)); 它
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的bug吗
我多次尝试再次运行,没有任何变化,但我尝试编写一个小示例,可选字符串而不是从存储库中运行,这也没问题。在.orElse(getCurrencyExchangeRateFromApi(请求))
,始终执行GetCurrencyExchangeFromAPI(请求)
(无论可选
是否为空)
在.orElseGet(()->getCurrencyExchangeRateFromApi(请求))
中,只有当可选
为空时,才会执行GetCurrencyExchangeFromAPI(请求)
如果“不工作”意味着您得到了一个异常,那么您的
getCurrencyExchangeRateFromApi(请求)可能有问题
方法。正如Eran所提到的,orElse
和orElseGet
之间有区别,无论可选的是什么,在orElse
中直接调用的方法将被执行,而orElseGet
将调用供应商
,只要可选的为null
下面是一个小演示:
public class TestOptional {
public static void main(String... args) {
Optional<String> val = Optional.ofNullable("Hello");
String s = val.orElse(test());
System.out.println(s);
s = val.orElseGet(() -> test());
System.out.println(s);
}
public static String test() {
System.out.println("Hello world");
return "hi";
}
}
Hello world
Hello
Hello