Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接受和应用之间的区别_Java_Asynchronous_Java 8_Completable Future - Fatal编程技术网

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
相关联,以便于记忆

其中,as
thenApply
接受一个
函数
实例,使用它来处理结果并返回一个未来,其中包含一个函数返回的值:

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");