将 future 与 futures 的集合结合起来(一次全部 运行 )以提供类似结构的 lambda
Combining a future with a collection of futures (all to run at once) to supply a similarly structured lambda
我有一个未来和一个期货清单,
CompletionStage<ParentEntity> p;
List<CompletionStage<ChildEntity>> cList;
我知道只要一个列表,我就能做到
CompletableFuture.allOf(cList).thenSomething( ...
并使用 .join()
获得每个已完成的未来。
所以我当然可以将 p
和 cList
组合成一个列表,并简单地将索引 0 视为父未来。但是,有没有一种方法可以让我更明确地使用 lambda 参数,例如:
CompletableFuture.foo(p, cList).thenBar((parentEntity, childEntityList) -> ...
或者,随便什么。只是 "remembering" 列表的第一个索引意味着一些特殊的东西,似乎不对。
假设我没看错,试试这个:
p.thenCombineAsync(allOf(cList), (pEntity, cEntities) -> {
// do something
});
诀窍是 thenCombine
两种未来:单一未来和 allOf
未来(各种图书馆提供)。
我决定使用 Spotify's allAsList
,像这样:
p.thenCombine(allAsList(cList),
(pEntity, cEntities) -> {
// ...
}
);
我相信其他图书馆也提供同样的服务。我的代码库刚好已经在使用这个了。
我有一个未来和一个期货清单,
CompletionStage<ParentEntity> p;
List<CompletionStage<ChildEntity>> cList;
我知道只要一个列表,我就能做到
CompletableFuture.allOf(cList).thenSomething( ...
并使用 .join()
获得每个已完成的未来。
所以我当然可以将 p
和 cList
组合成一个列表,并简单地将索引 0 视为父未来。但是,有没有一种方法可以让我更明确地使用 lambda 参数,例如:
CompletableFuture.foo(p, cList).thenBar((parentEntity, childEntityList) -> ...
或者,随便什么。只是 "remembering" 列表的第一个索引意味着一些特殊的东西,似乎不对。
假设我没看错,试试这个:
p.thenCombineAsync(allOf(cList), (pEntity, cEntities) -> {
// do something
});
诀窍是 thenCombine
两种未来:单一未来和 allOf
未来(各种图书馆提供)。
我决定使用 Spotify's allAsList
,像这样:
p.thenCombine(allAsList(cList),
(pEntity, cEntities) -> {
// ...
}
);
我相信其他图书馆也提供同样的服务。我的代码库刚好已经在使用这个了。