懒惰评估Optional

Gio*_*ato 5 java lazy-evaluation optional

是否java.util.Optional只有在需要时才进行评估?

我需要将传递Optional给(我无法更改的API的)方法,该方法可能会也可能不会使用那个值Optional。由于值是由一个重运算来计算,我想以计算值,只有当(如果)它是需要的,例如呼叫get()orElseGet()ifPresent()等。

有点像Optional.ofLazy(Supplier<T> computeValue)

Ond*_*žka 5

你想要的是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.
    }
}
Run Code Online (Sandbox Code Playgroud)

为简洁起见,我还想将两者合二为一,但我想稍后会出现。