将期货与一系列期货(全部同时运行)相结合,以提供结构相似的lambda

时间:2019-02-08 07:02:45

标签: java lambda java-8 completable-future

我有一个期货和一个期货清单,

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

我只知道一个列表,我就能做到

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

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

因此,我当然可以将pcList合并到一个列表中,并简单地将索引0视为父级将来。但是,有没有一种方法可以让我对lambda参数更加明确:

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

或者,随便。只是“记住”列表的第一个索引意味着某些特殊含义,似乎并不正确。

2 个答案:

答案 0 :(得分:0)

假设我说对了,请尝试使用此方法:

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

答案 1 :(得分:0)

诀窍是在两个期货上thenCombine:一个期货和一个allOf期货(由各种图书馆提供)。

我决定使用Spotify's allAsList,如下所示:

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

我确定其他库也提供相同的库。我的代码库刚好已经在使用这一代码。