当前位置: 首页 > 知识库问答 >
问题:

CompletableFuture thenApply vs thenCompose

席烨
2023-03-14

我搞不清thenapply()和thencompose()之间的区别。

那么,有人能提供一个有效的用例吗?

从Java文档中:

thenApply(Function<? super T,? extends U> fn)

返回一个新的completionstage,当此阶段正常完成时,将以此阶段的结果作为所提供函数的参数执行该completionstage

thenCompose(Function<? super T,? extends CompletionStage<U>> fn)

返回一个新的completionstage,当此阶段正常完成时,将以此阶段作为所提供函数的参数执行该completionstage

我发现thencompose的第二个参数扩展了CompletionStage,而thenapply没有扩展CompletionStage。

谁能提供一个例子,在什么情况下我必须使用thenapply以及什么时候使用thencompose

共有1个答案

陈龙野
2023-03-14

如果具有同步映射函数,则使用thenapply

CompletableFuture<Integer> future = 
    CompletableFuture.supplyAsync(() -> 1)
                     .thenApply(x -> x+1);

如果您有异步映射函数(即返回completablefuture),则使用thencompose。然后它将直接返回一个具有结果的未来,而不是嵌套的未来。

CompletableFuture<Integer> future = 
    CompletableFuture.supplyAsync(() -> 1)
                     .thenCompose(x -> CompletableFuture.supplyAsync(() -> x+1));
 类似资料:

相关问答

相关文章

相关阅读