5

我正在使用 runAsync() 运行数百个函数。所有函数都会修改一些静态可用的列表,因此不需要返回任何内容。我想确保它们都完成,然后再继续我的处理。这是合适的等待方式吗?有没有更简单的方法来完成我想要做的事情?

List<CompletableFuture<Void>> futures = new ArrayList<>();
active_sites.forEach(site -> site.getEntryPoints().stream().map(EntryPoint::scanEntryPoint).forEach(futures::add));
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
4

1 回答 1

5

您可以简化很多:

CompletableFuture[] scans = active_sites.stream()
    .flatMap(site -> site.getEntryPoints().stream())
    .map(EntryPoint::scanEntryPoint)
    .toArray(CompletableFuture[]::new)
CompletableFuture.allOf(scans).join();
于 2021-04-16T10:01:12.640 回答