java - 为什么 CompletableFuture.allOf 声明为 CompletableFuture<Void>?

标签 java concurrency java-8 completable-future

为什么是CompletableFuture.allOf声明为 CompletableFuture<Void>而不是返回结果集合或其他东西?我认为制作 CompletableFuture.anyOf 是个好主意返回 CompletableFuture<Object> ,但我看到这两种方法相互关联,所以我对它们返回的内容感到困惑。

最佳答案

anyOf 必须以某种方式告诉您完成触发 anyOf 的特定 CompletableFuture 的结果是什么。在 allOf 的情况下,这不是必需的,因为您知道哪些 futures 已完成 - 所有这些。

allOf(就像 anyOf)不要求所有 future 都具有相同的类型。因此,如果它要返回集合的 future ,则它必须是 Object 的集合,这可能不是您想要的。

如果您真的想让 allOf 返回集合的 future ,那么编写您自己的就相当简单了:

public static CompletableFuture<List<Object>> myAllOf(CompletableFuture<?>... futures) {
     return CompletableFuture.allOf(futures)
            .thenApply(x -> Arrays.stream(futures)
                    .map(f -> (Object) f.join())
                    .collect(toList())
            );
}

如果您有此问题的类型安全版本并且需要将特定类型的 future 集合转换为相同类型的 future 集合,请参阅此问题的几个示例:List<Future> to Future<List> sequence

关于java - 为什么 CompletableFuture.allOf 声明为 CompletableFuture<Void>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083603/

相关文章:

java - Java8 中按值比较返回奇怪的结果

java - 如何在Java中提交隐藏了带有生成值的csrf_token登录字段的html登录表单

java - 如何从 BindingResult 获取 Controller 中的错误文本

java - 如何在 Android Studio 中设置 Gradle Wrapper

c++ - 使用 memory_order_relaxed 进行存储,使用 memory_order_acquire 进行加载

HashMap 上的 Java 8 Map Reduce 作为 lambda

java - Google map api 不显示我当前的位置

monad 中的多线程

scala - 在 Scala 中,有没有办法告诉您正在运行的执行上下文?

intellij-idea - Lombok @RequiredArgsConstructor(onConstructor_ = {@MyAnnotation}) IntelliJ IDEA 编译错误