java - 从Optional<CompletableFuture<T>>到CompletableFuture<Optional<T>>

标签 java option-type completable-future

我想转换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/

相关文章:

java - 如何将对象从 Firestore 转换为数组列表?

arrays - URL 数组抛出可选错误 swift

java - Optional.orElse 不使用匿名类型进行编译

java - CompletableFuture.allOf() 在等待完成时是否比使用 CompletableFuture.join() 的循环有任何优势?

java - ThreadPoolTask​​Executor 抛出 RejectedExecutionException

java - Java Spring 框架中保存上传图像的文件夹的位置

java - 了解 Apache HTTP 客户端中由 PoolingHttpClientConnectionManager 管理的连接的生命周期

java - JUnit如何在xml报告文件中保存DisplayName

用于检查输入参数的 Java 选项