Java8有一个函数CompletableFuture.allOf(CompletableFuture...cfs),当所有给定的期货都完成时,该函数将返回一个完成的CompletableFuture。
但是,我几乎总是要处理的不是CompletableFuture数组,而是List<CompletableFuture>。当然,我可以使用toArray()方法,但这最终导致必须不断地在数组和列表之间来回转换,这有点麻烦。
如果有一种巧妙的方法来获取CompletableFuture<List<T>>来交换List<CompletableFuture<T>>,而不是不断地抛出中间数组创建,那就太好了。有谁知道在Java8中实现这一点的方法吗?
发布于 2016-03-05 12:11:43
不幸的是,据我所知,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
https://stackoverflow.com/questions/35809827
复制相似问题