将未来与一系列期货(一次性全部运行)结合起来,提供类似结构的lambda

问题描述 投票:0回答:2

我有未来和期货清单,

CompletionStage<ParentEntity> p;
List<CompletionStage<ChildEntity>> cList;

我知道只是一个清单,我能做到

CompletableFuture.allOf(cList).thenSomething( ...

并使用.join()来完成每个完成的未来。

所以我当然可以将pcList组合成一个列表,并简单地将索引0视为父母的未来。但是,有没有一种方法可以更明确地使用lambda参数,例如:

CompletableFuture.foo(p, cList).thenBar((parentEntity, childEntityList) -> ...

管他呢。只是“记住”列表的第一个索引意味着一些特殊的东西,似乎并不正确。

java lambda java-8 completable-future
2个回答
0
投票

假设我说得对,试试这个:

p.thenCombineAsync(allOf(cList), (pEntity, cEntities) -> {
   // do something
});

0
投票

问题是thenCombine关于两个未来:一个未来,一个allOf未来(各种图书馆提供)。

我决定使用Spotify's allAsList,像这样:

p.thenCombine(allAsList(cList),
    (pEntity, cEntities) -> {
      // ...
    }
);

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

© www.soinside.com 2019 - 2024. All rights reserved.