3

如果有Collection<CompletableFuture<MyResult>>,我希望将其转换为CompletableFuture<Collection<MyResult>>. 因此,转换后我只有一个未来,可以MyResult使用CompletableFuturelikethenApply等方法轻松地在集合上编写业务逻辑thenAccept。但是CompletableFuture#allOf有结果类型Void,所以在调用它之后我得到“没有结果”。例如,我无法从返回的未来中检索(据我了解)与Collection<CompletableFuture<MyResult>>.

我怀疑CompletableFuture#allOf只是归还 Future ,毕竟它已经完成了收集。所以我可以在循环转换中调用CompletableFuture#allOf(...).isDone然后manually (!),我的假设是否正确?Collection<CompletableFuture>CompletableFuture<Collection>

4

2 回答 2

0

如果您需要结果,您可以使用https://github.com/spotify/completable-futures (spotify-completlablefutures 库)CompletableFuture<Collection<MyResult>>中的 allAsList 方法来获得它。会给你。CompletableFutures.allAsList(List<CompletableFuture<MyResult>>)CompletableFuture<List<MyResult>>

于 2017-07-09T12:12:40.313 回答
0

是的,该allOf方法不提供数据,但确实表明所有期货都已完成。这消除了使用更繁琐的倒计时锁存方法的需要。期望您随后将完成的期货转换回可Collection用于应用您的业务逻辑的产品。有关实施详细信息,请参阅此问题此博客文章对此主题进行了很好的讨论。

于 2016-01-23T20:21:52.040 回答