2016-12-16 41 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 
} 
相關問題