使用供应商延迟提供默认值

正常 orElse 方法采用 Object,所以你可能会问,为什么有一个选项,在这里提供一个 Supplier(该 orElseGet 方法)。

考虑:

String value = "something";
return Optional.ofNullable(value)
               .orElse(getValueThatIsHardToCalculate()); // returns "something"

它仍会调用 getValueThatIsHardToCalculate(),即使它的结果未被使用,因为可选项不为空。

为避免此罚款,你需要供应商:

String value = "something";
return Optional.ofNullable(value)
               .orElseGet(() -> getValueThatIsHardToCalculate()); // returns "something"

这样,只有当 Optional 为空时才会调用 getValueThatIsHardToCalculate()