Как объединить асинхронный CompletableFuture с завершенным CompletableFuture?

Я изучил следующий код: Как объединить 3 или более CompletionStages?, но в этом посте объединены только Завершенные задачи из CompletableFutures.

Как я могу объединить асинхронный CompletableFuture с Completed CompletableFuture, чтобы объединить результаты уже завершенного completableFuture с тем, результат которого еще предстоит вычислить?


person KayV    schedule 16.12.2016    source источник
comment
Ни один код в связанном вопросе не зависит от того, завершены фьючерсы или нет.   -  person Holger    schedule 16.12.2016


Ответы (1)


Вы можете использовать CompletableFuture.completedFuture для преобразования любых обычных данных в объект CompletableFuture, а затем использовать thenCompose из CompletableFuture для объединения результатов асинхронной операции. Образец кода:

long userId = 12345678899L;
CompletableFuture.completedFuture(userId)
.thenCompose(userId -> getUserDeatils(userId))
.thenAccept(user -> doSomething(user));
// or thenApply(user -> doSomething(user))

где getUserDeatils(userId) может выглядеть так:

CompletableFuture<User> getUserDeatils(long userId) {
  // some async code to load user details
}
person Amit Tyagi    schedule 16.12.2017