Java 接受和应用之间的区别
我正在阅读Java 接受和应用之间的区别,java,asynchronous,java-8,completable-future,Java,Asynchronous,Java 8,Completable Future,我正在阅读CompletableFuture上的文档,对thenacept()的描述如下 返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段的结果作为提供的操作的参数执行该阶段 对于,则使用apply() 返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段的结果作为所提供函数的参数执行该阶段``` 有人能用一些简单的例子来解释两者的区别吗?您需要查看完整的方法签名: CompletableFuture<Void> thenA
CompletableFuture
上的文档,对thenacept()
的描述如下
返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段的结果作为提供的操作的参数执行该阶段
对于,则使用apply()
返回一个新的CompletionStage,当此阶段正常完成时,将使用此阶段的结果作为所提供函数的参数执行该阶段```
有人能用一些简单的例子来解释两者的区别吗?您需要查看完整的方法签名:
CompletableFuture<Void> thenAccept(Consumer<? super T> action)
<U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)
completable future then accept(消费者8472解释得很清楚,它们的区别在于它们的输出值和参数,以及您可以使用它们做什么
CompletableFuture.completedFuture("FUTURE")
.thenApply(f -> f.toLowerCase())
.thenAccept(f -> System.out.println(f))
.thenAccept(f -> System.out.println(f))
.thenApply(f -> new String("FUTURE"))
.thenAccept(f -> System.out.println(f));
应用函数应用另一个函数并传递一个未来值
Accept函数使用该值并返回未来持有无效,然后apply返回当前阶段的结果,而Accept不返回当前阶段的结果
阅读本文:
我会用我记得两者区别的方式来回答这个问题:
考虑下一个未来。
CompletableFuture<String> completableFuture
= CompletableFuture.supplyAsync(() -> "Hello");
您可以将其与streams
中的forEach
相关联,以便于记忆
其中,asthenApply
接受一个函数
实例,使用它来处理结果并返回一个未来,其中包含一个函数返回的值:
CompletableFuture<String> future = completableFuture
.thenApply(s -> s + " World");
CompletableFuture=CompletableFuture
。然后应用(s->s+“世界”);
您可以将其与streams
中的map
相关联,因为它实际上正在执行转换。如果我们将其与Stream相比较,则accept()与forEach(消费者)类似,而apply与map(函数)类似
CompletableFuture<Void> future = completableFuture
.thenAccept(s -> System.out.println("Computation returned: " + s));
CompletableFuture<String> future = completableFuture
.thenApply(s -> s + " World");