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

时间:2015-09-13 07:09:21

标签: java java-8 completable-future

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

我怀疑CompletableFuture#allOf(...).isDone只是在收集完毕后才回复未来。所以我可以在周期转换manuallyCollection<CompletableFuture>中调用CompletableFuture<Collection>然后# does NOT work: usa_qualification = 'XML STRING LIKE AWS DOCS GIVE' # DOES work: usa_qualification = { :QualificationTypeId => "00000000000000000071", :Comparator => "EqualTo", :LocaleValue => { :Country => "US"}, result = mturk.createHIT( :Title => title, ... :QualificationRequirement => usa_qualification , ... (!),我的假设是正确的吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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