是否可以有一个java.util.Optional,仅在需要时才进行评估?我需要将一个Optional传递给一个方法(属于一个我无法更改的API),这个方法可能会也可能不会使用那个Optional的值。因为这个值是通过一个繁重的操作计算出来的,所以我希望只在需要的时候才计算那个值,例如调用get(),orElseGet(),ifPresent()等。比如Optional.ofLazy(Supplier<T> computeValue)。
java.util.Optional
Optional
get()
orElseGet()
ifPresent()
Optional.ofLazy(Supplier<T> computeValue)
relj7zay1#
你需要的是一个Supplier,它返回一个Optional。Supplier是懒惰的部分。概念代码:
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. } }
为了简洁起见,我也想有一些东西,结合成一个,但这将是以后我猜。
gorkyyrv2#
为了简洁起见,我认为orElseGet是您想要的:
orElseGet
void foo() { System.out.println("Prints only foo"); System.out.println(Optional.of("foo").orElseGet(() -> other())); System.out.println("Prints foo and bar"); System.out.println(Optional.of("foo").orElse(other())); } private String other() { System.out.println("bar"); return "bar"; }
2条答案
按热度按时间relj7zay1#
你需要的是一个
Supplier
,它返回一个Optional
。Supplier
是懒惰的部分。概念代码:
为了简洁起见,我也想有一些东西,结合成一个,但这将是以后我猜。
gorkyyrv2#
为了简洁起见,我认为
orElseGet
是您想要的: