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

How to prevent the function passed to Optional's orElse from being executed when the Optional is not empty?

如果我从 orElse 调用一个函数,即使 Optional 不为空,该函数也会执行。有什么方法可以限制函数的执行仅在 Optional 为空时执行?

Optional.ofNullable(someValue).orElse(someFunction());

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

使用orElseGet代替orElse

Optional.ofNullable(someValue).orElseGet(SomeClass::someFunction);

Optional.ofNullable(someValue).orElseGet(()->someFunction());