如果我有Collection<CompletableFuture<MyResult>>
,我希望将其转换为CompletableFuture<Collection<MyResult>>
。因此,转换后我只有一个未来,并且可以使用MyResult
中的方法CompletableFuture
轻松地在thenApply
集合上编写商务逻辑,例如thenAccept
,CompletableFuture#allOf
等。但是Void
有结果类型Collection<CompletableFuture<MyResult>>
所以在调用它后我得到“没有结果”。例如。我无法检索(根据我的理解)返回的未来结果为CompletableFuture#allOf
的任何结果。
我怀疑CompletableFuture#allOf(...).isDone
只是在收集完毕后才回复未来。所以我可以在周期转换manually
到Collection<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 ,
...
(!),我的假设是正确的吗?
答案 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>>
。