Java 8 CompletableFuture.allOf(...) with Collection or List

2022-08-31 12:16:44

Java 8 有一个函数 CompletableFuture.allOf(CompletableFuture<?>...cfs) 返回一个在所有给定期货完成时完成的。CompletableFuture

但是,我几乎总是不处理s数组,而是有一个.当然,我可以使用该方法,但这最终有点痛苦,因为必须在数组和列表之间不断来回转换。CompletableFutureList<CompletableFuture>toArray()

如果有一种巧妙的方式来换取 a,而不是不断地投入中间数组创建,那就太好了。有谁知道在Java 8中做到这一点的方法吗?CompletableFuture<List<T>>List<CompletableFuture<T>>


答案 1

不幸的是,据我所知,CompletableFuture不支持集合。

你可以做这样的事情来使代码更干净一些,但它基本上做同样的事情。

public <T> CompletableFuture<List<T>> allOf(List<CompletableFuture<T>> futuresList) {
    CompletableFuture<Void> allFuturesResult =
    CompletableFuture.allOf(futuresList.toArray(new CompletableFuture[futuresList.size()]));
    return allFuturesResult.thenApply(v ->
            futuresList.stream().
                    map(future -> future.join()).
                    collect(Collectors.<T>toList())
    );
}

发现这个非常翔实:http://www.nurkiewicz.com/2013/05/java-8-completablefuture-in-action.html


答案 2

推荐