是否有可能只在需要时评估java.util.Optional
?
我需要将Optional
传递给(我无法更改的API)方法,此方法可能会也可能不会使用Optional
的值。由于该值是通过繁重的操作计算的,因此我只想在需要时(如果需要)计算该值,例如,致电get()
,orElseGet()
,ifPresent()
等
类似于Optional.ofLazy(Supplier<T> computeValue)
。
答案 0 :(得分:3)
您想要的是一个Supplier
,它返回一个Optional
。 Supplier
成为懒惰的一部分。
概念代码:
Foo heavyComputation() { ... }
void main() {
Supplier<Optional<Foo>> sup = () -> heavyComputation();
doSomethingWhichMayNeedHeavyResult(sup);
}
void doSomethingWhichMayNeedHeavyResult(Supplier<Optional<Foo>> sup) {
if (electricityIsTooCheap) {
Foo foo = sup.get().get().orElse(null); // This will lazy load.
}
}
为简洁起见,我还想将两者结合在一起,但是我想稍后会出现。