将 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() 获得每个已完成的未来。

所以我当然可以将 pcList 组合成一个列表,并简单地将索引 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) -> {
      // ...
    }
);

我相信其他图书馆也提供同样的服务。我的代码库刚好已经在使用这个了。