Я пытаюсь создать несколько CompletionStage типа List, например. CompletionStage<List<Car>>
. И в конце я хочу объединить все ответы типа <List<Car>>
в один список в один CompletionStage .
CompletionStage<List<Car>> completionStageOne= carClientOne.getCarList();
CompletionStage<List<Car>> completionStageTwo= carClientTwo.getCarList();
CompletionStage<List<Car>> completionStageThree= carClientThree.getCarList();
Итак, предположим, у меня есть 3 разных сервиса, которые предоставят мне другой список автомобилей, как в форме ответа CompletionStage<List<Car>>
Теперь я пытаюсь объединить их и создать один общий список автомобилей, и здесь у меня возникает проблема.
Я использую код ниже, чтобы объединить результат
CompletionStage<List<Car>> completionStageOneTwo = completionStageOne
.thenCombine(completionStageTwo,(x, y) -> Stream.concat(x.stream(), y.stream()).collect(Collectors.toList()));
//above will work but if I add the third one then it will not.
CompletionStage<List<Car>> completionStageFinal = completionStageOneTwo
.thenCombine(completionStageThree,(x, y) -> Stream.concat(x.stream(), y.stream()).collect(Collectors.toList()));
и в конце я делаю
List<Car> finalList = completionStageFinal.toCompletableFuture().get();
Так что я делаю не так? Как я могу объединить эти три? Я что-то блокирую?
Примечание: я уже проверил этот ответ от Хольгера , но не смог понять, как использовать concat там.