如何将异步CompletableFuture与完成的CompletableFuture结合起来?

时间:2016-12-16 11:03:20

标签: concurrency java-8 future completable-future

我查看了以下代码: How to combine 3 or more CompletionStages?,但是在这篇文章中,只有来自CompletableFutures的已完成任务被合并。

如何将异步CompletableFuture与Completed CompletableFuture结合起来,以便将已完成的completableFuture的结果与尚未计算结果的结果相结合?

1 个答案:

答案 0 :(得分:0)

您可以使用CompletableFuture.completedFuture将任何普通数据转换为CompletableFuture对象,然后使用thenCompose中的CompletableFuture来合并Async操作的结果。示例代码:

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
}