我想转换Optional<CompletableFuture<T>>
至CompletableFuture<Optional<T>>
。有没有更惯用的方式不使用 Optional.get()
?
Optional<CompletableFuture<T>> opt = Optional.empty();
CompletableFuture<Optional<T>> fut =
opt.isPresent() ?
opt.get().thenApply(Optional::of) :
CompletableFuture.completedFuture(Optional.empty());
最佳答案
您可以结合使用 map()
和 orElseGet()
进行转换:
CompletableFuture<Optional<T>> fut = opt.map(f -> f.thenApply(Optional::of))
// now you have an Optional<CompletableFuture<Optional<T>>>
// just get rid of the outer Optional and you have the desired result:
.orElseGet(() -> CompletableFuture.completedFuture(Optional.empty()))
或者,您也可以执行以下操作:
opt.orElseGet(() -> CompletableFuture.completedFuture(null))
.thenApply(Optional::ofNullable)
主要区别在于,如果初始的 CompletableFuture
返回 null
,则该函数不会抛出 NullPointerException
。
关于java - 从Optional<CompletableFuture<T>>到CompletableFuture<Optional<T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33449591/