Я пытаюсь создать несколько 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.
CompletionStage<List<Car>> completionStageOneTwo = completionStageOne .thenCombine(completionStageTwo,(x, y) -> Stream.concat(x.stream(), y.stream()).collect(Collectors.toList()));
он объединяет два результата в один CompletionStage типа List‹Car›, но когда я пытаюсь объединить CompletionStageThree с completionStageOneTwo (который результат комбинации завершенияStageOne и завершенияStageTwo ), это не работает. - person user2367130   schedule 29.08.2018java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection
- person user2367130   schedule 29.08.2018