CompletableFuture如何等待其多个异步任务完成,并返回一个结果集合
时间: 2023-08-10 20:05:15 浏览: 204
我们可以使用`CompletableFuture.allOf()`方法等待多个异步任务完成,然后使用`CompletableFuture.join()`方法获取每个异步任务的结果,并将它们存储到一个集合中返回。以下是一个示例代码:
```java
List<CompletableFuture<String>> futures = new ArrayList<>();
futures.add(CompletableFuture.supplyAsync(() -> "Result 1"));
futures.add(CompletableFuture.supplyAsync(() -> "Result 2"));
futures.add(CompletableFuture.supplyAsync(() -> "Result 3"));
CompletableFuture<Void> allFutures = CompletableFuture.allOf(
futures.toArray(new CompletableFuture[futures.size()]));
CompletableFuture<List<String>> combinedFuture = allFutures.thenApply(v -> {
return futures.stream()
.map(future -> future.join())
.collect(Collectors.toList());
});
List<String> results = combinedFuture.get();
```
在此示例中,我们创建了一个包含三个异步任务的`List`,然后使用`CompletableFuture.allOf()`方法等待所有任务完成。然后,我们使用`CompletableFuture.thenApply()`方法获取每个任务的结果,并将其存储在一个`List`中返回。最后,我们使用`CompletableFuture.get()`方法等待结果并获取它们。
注意,由于`CompletableFuture.allOf()`返回一个`CompletableFuture<Void>`,因此需要使用`thenApply()`方法来处理结果并返回一个`CompletableFuture<List<String>>`。
阅读全文