我搞不清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
?
如果具有同步映射函数,则使用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));