惰性评估Optional

时间:2017-06-01 14:59:32

标签: java lazy-evaluation optional

是否有可能只在需要时评估java.util.Optional

我需要将Optional传递给(我无法更改的API)方法,此方法可能会也可能不会使用Optional的值。由于该值是通过繁重的操作计算的,因此我只想在需要时(如果需要)计算该值,例如,致电get()orElseGet()ifPresent()

类似于Optional.ofLazy(Supplier<T> computeValue)

1 个答案:

答案 0 :(得分:3)

您想要的是一个Supplier,它返回一个OptionalSupplier成为懒惰的一部分。

概念代码:

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.
    }
}

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