thenApply()和thenCompose()的区别

  1. thenapply()是接受一个Function参数用来转换CompletableFuture,相当于流的map操作,返回的是非CompletableFuture类型,它的功能相当于将CompletableFuture转换成CompletableFuture
    thenApply()源码:
 public  CompletableFuture thenApply(
    Function fn) {
        return uniApplyStage(null, fn);
   }

解读:
参数: Function fn)
输入前面的CompletableFuture中的T的值,返回一个继承U的类型的值,将这个值返回
顺序:先确定返回值U或其子类,再确定方法中 public CompletableFuture thenApply()中的 类型

  1. thenCompose()在异步操作完成的时候对异步操作的结果进行一些操作,并且仍然返回CompletableFuture类型,相当于flatMap,用来连接两个CompletableFuture。

总结:thenApply()转换的是泛型中的类型,是同一个CompletableFuture;
thenCompose()用来连接两个CompletableFuture,是生成一个新的CompletableFuture。他们都是让CompletableFuture可以对返回的结果进行后续操作,就像流一样进行map和flatMap的装换。

  1. 例子:
    thenApply():
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
      return 100;
});
CompletableFuture f = future.thenApplyAsync(i -> i * 10).thenApply(i -> i.toString());

System.out.println(f.get()); //"1000"

thenCompose():

CompletableFuture future = CompletableFuture.supplyAsync(() -> {
    return 100;
});
CompletableFuture f = future.thenCompose( i -> {
    return CompletableFuture.supplyAsync(() -> {
        return (i * 10) + "";
    });
});

System.out.println(f.get()); //1000

你可能感兴趣的:(thenApply()和thenCompose()的区别)