繁体   English   中英

java.util.concurrent.CompletableFuture#allOf的目的是什么?

[英]What is the purpose of java.util.concurrent.CompletableFuture#allOf?

如果我有Collection<CompletableFuture<MyResult>> ,我希望将其转换为CompletableFuture<Collection<MyResult>> 所以转换后我只有一个未来,可以使用CompletableFuture方法thenApplyMyResult集合上编写bussines逻辑,如thenApplythenAccept等。但CompletableFuture#allOf结果类型为Void因此在调用它后我得到“无结果”。 例如,我无法检索(根据我的理解)返回的未来的任何结果,其中correspods为Collection<CompletableFuture<MyResult>>

我怀疑CompletableFuture#allOf只是在收集完毕之后才返回Future。 所以我可以调用CompletableFuture#allOf(...).isDone然后在循环转换Collection<CompletableFuture> manually (!)CompletableFuture<Collection> ,我的假设是正确的吗?

是的, allOf方法不提供数据,但确实表明所有期货都已完成。 这消除了使用更麻烦的倒计时锁存方法的需要。 期望您将完成的期货转换回可用的Collection以应用您的业务逻辑。 有关实施细节,请参阅此问题 本博客文章中提供有关此主题的精彩讨论。

如果您需要CompletableFuture<Collection<MyResult>>作为结果,您可以使用https://github.com/spotify/completable-futures(potify-completlablefutures库)中的allAsList方法获取它。 CompletableFutures.allAsList(List<CompletableFuture<MyResult>>)将为您提供CompletableFuture<List<MyResult>>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM