Объединяя будущее с коллекцией фьючерсов (все для запуска за один раз), чтобы обеспечить аналогичную структуру лямбда - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть будущее и список фьючерсов,

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

Я знаю только для списка, я могу сделать

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

и использовать .join() для завершения каждогобудущее.

Так что, конечно, я мог бы просто объединить p и cList в один список и просто считать индекс 0 родительским будущим.Но есть ли способ, которым я могу быть более явным с лямбда-параметрами, такими как:

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

Или что угодно.Просто «запоминание» первого индекса списка, означающего что-то особенное, кажется неправильным.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Трюк состоял в том, чтобы thenCombine на двух фьючерсах: едином будущем и allOf будущем (которое предоставляют различные библиотеки).

Я решил использовать Spotify's allAsList вот так:

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

Я уверен, что другие библиотеки предоставляют то же самое.Моя кодовая база только что уже использовала эту.

0 голосов
/ 08 февраля 2019

Если я вас правильно понял, попробуйте использовать это:

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