Je lis le document sur CompletableFuture
et la description de thenAccept()
est
Renvoie un nouveau CompletionStage qui, lorsque cette étape se termine normalement, est exécuté avec le résultat de cette étape comme argument de l'action fournie.
et pour thenApply()
est
Renvoie un nouveau CompletionStage qui, lorsque cette étape se termine normalement, est exécuté avec le résultat de cette étape comme argument de la fonction fournie. ''
Quelqu'un peut-il expliquer la différence entre les deux avec quelques exemples simples?
Vous devez regarder les signatures de méthode complètes:
CompletableFuture<Void> thenAccept(Consumer<? super T> action)
<U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)
thenAccept
prend un Consumer
et retourne un T=Void
CF, c'est-à-dire qui ne porte pas de valeur, uniquement l'état d'achèvement.
thenApply
d'autre part prend un Function
et retourne un CF portant la valeur de retour de la fonction.
thenApply
renvoie le résultat de l'étape actuelle, contrairement à thenAccept
.
Lisez cet article: http://codeflex.co/Java-multithreading-completablefuture-explained/
Comme the8472 clairement expliqué, ils se différencient par leur valeur de sortie et leurs arguments et donc ce que vous pouvez leur faire
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
les fonctions Apply appliquent une autre fonction et transmettent un futur contenant une valeur
les fonctions Accepter consomment cette valeur et renvoient le maintien futur nul