Java8 CompletableFuture.allOf (...)和 Collection 或 List

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

但是,我几乎总是不处理 CompletableFuture数组,而是使用 List<CompletableFuture>。当然,我可以使用 toArray()方法,但是不得不在数组和列表之间不断地来回转换,这最终会带来一些麻烦。

如果有一种巧妙的方法可以用 List<CompletableFuture<T>>来交换 CompletableFuture<List<T>>,而不必不断地添加中间数组创建,那就太好了。有人知道用 Java8做这件事的方法吗?

136434 次浏览

Unfortunately, to my knowledge CompletableFuture does not support collections.

You could do something like this to make the code a bit cleaner, but it essentially does the same thing

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())
);
}

Found this very informative : http://www.nurkiewicz.com/2013/05/java-8-completablefuture-in-action.html