then completionstage completablefuture await async java asynchronous java-8 completable-future

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.