我想将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());发布于 2016-12-03 03:02:10
您可以结合使用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,则此a不会抛出NullPointerException。
https://stackoverflow.com/questions/33449591
复制相似问题