java - completionstage - Diferencia entre thenAccept y thenApply
java async callback (3)
Como lo explicó claramente el modelo 8472 , se diferencian por su valor de salida y argumentos y, por lo tanto, qué pueden hacer con ellos.
CompletableFuture.completedFuture("FUTURE")
.thenApply(r -> r.toLowerCase())
.thenAccept(f -> System.out.println(f))
.thenAccept(f -> System.out.println(f))
.thenApply(f -> new String("FUTURE"))
.thenAccept(f -> System.out.println(f));
future
null
FUTURE
Las funciones Aplicar aplican otra función y pasan un futuro con un valor
Las funciones de Aceptar consumen este valor y devuelven la retención futura.
Estoy leyendo el documento en CompletableFuture
y La descripción de thenAccept()
es
Devuelve una nueva etapa de finalización que, cuando esta etapa se completa normalmente, se ejecuta con el resultado de esta etapa como el argumento de la acción suministrada.
y para thenApply()
es
Devuelve una nueva Etapa de finalización que, cuando esta etapa se completa normalmente, se ejecuta con el resultado de esta etapa como el argumento de la función suministrada.
¿Alguien puede explicar la diferencia entre los dos con algunos ejemplos simples?
Es necesario mirar las firmas de método completo:
CompletableFuture<Void> thenAccept(Consumer<? super T> action)
<U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)
thenAccept
toma un Consumer
y devuelve un T=Void
CF, es decir, uno que no tiene un valor, solo el estado de finalización.
thenApply
la aplicación, por otro lado, toma una Function
y devuelve un CF con el valor de retorno de la función.
thenApply
devuelve el resultado de la etapa thenAccept
mientras que thenAccept
no lo hace.
Lea este artículo: http://codeflex.co/java-multithreading-completablefuture-explained/