The normal orElse
method takes an Object
, so you might wonder why there is an option to provide a Supplier
here (the orElseGet
method).
Consider:
String value = "something";
return Optional.ofNullable(value)
.orElse(getValueThatIsHardToCalculate()); // returns "something"
It would still call getValueThatIsHardToCalculate()
even though it's result is not used as the optional is not empty.
To avoid this penalty you supply a supplier:
String value = "something";
return Optional.ofNullable(value)
.orElseGet(() -> getValueThatIsHardToCalculate()); // returns "something"
This way getValueThatIsHardToCalculate()
will only be called if the Optional
is empty.