thenApply()和thenCompose()的区别

时人不识凌云木,直待凌云始道高。这篇文章主要讲述thenApply()和thenCompose()的区别相关的知识,希望能为你提供帮助。
thenApply()和thenCompose()的区别:
thenapply()是返回的是非CompletableFuture类型:
它的功能相当于将CompletableFuture< T> 转换成CompletableFuture< U> 。
thenCompose()用来连接两个CompletableFuture,返回值是新的CompletableFuture:


总结:thenApply()转换的是泛型中的类型,是同一个CompletableFuture;
thenCompose()用来连接两个CompletableFuture,是生成一个新的CompletableFuture。

例子:
1.thenApply():
CompletableFuture< Integer> future = CompletableFuture.supplyAsync(() -> {
      return 100;
});
CompletableFuture< String> f =future.thenApplyAsync(i -> i * 10).thenApply(i -> i.toString());
System.out.println(f.get()); //"1000"
【thenApply()和thenCompose()的区别】thenApply()源码:
public < U> CompletableFuture< U> thenApply(
Function< ? super T,? extends U> fn) {
return uniApplyStage(null, fn);
}
解读:
参数: Function< ? super T,? extends U> fn)
输入前面的CompletableFuture< T> 中的T的值,返回一个继承U的类型的值,将这个值返回

顺序:先确定返回值U或其子类,再确定方法中 public < U> CompletableFuture< U> thenApply()中的 < U> 类型
 
2.thenCompose():
CompletableFuture< Integer> future = CompletableFuture.supplyAsync(() -> {
return 100;
});
CompletableFuture< String> f =future.thenCompose( i -> {
return CompletableFuture.supplyAsync(() -> {
return (i * 10) + "";
});
});
System.out.println(f.get()); //1000














    推荐阅读