当Optional不为空时,如何防止传递给Optional的orElse的函数被执行?

Ami*_*dav 6 java optional java-8

如果我正在调用函数orElse,即使该函数Optional不为空,也会执行该函数.有没有办法限制函数的执行只有当它Optional是空的?

Optional.ofNullable(someValue).orElse(someFunction());
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 13

someFunction()因为它是传递给方法的参数而被执行,并且在执行方法之前评估传递给方法的参数.为了避免执行,您应该someFunction()Supplier实例中传递.

使用orElseGet而不是orElse:

Optional.ofNullable(someValue).orElseGet(SomeClass::someFunction);
Run Code Online (Sandbox Code Playgroud)

要么

Optional.ofNullable(someValue).orElseGet(()->someFunction());
Run Code Online (Sandbox Code Playgroud)