2016-12-16 97 views
0

我看了下面的代码: How to combine 3 or more CompletionStages?,但是在这篇文章中只有来自CompletableFutures的Completed任务被合并。如何将异步CompletableFuture与完成的CompletableFuture结合起来?

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

+3

在链接的问题的代码都不依赖于期货是否完成与否。 – Holger

回答

0

您可以使用CompletableFuture.completedFuture将任何常规数据转换为CompletableFuture对象,然后使用CompletableFuture中的thenCompose组合来自异步操作的结果。示例代码:

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

其中getUserDeatils(用户ID)可能是这样的:

CompletableFuture<User> getUserDeatils(long userId) { 
    // some async code to load user details 
} 
相关问题