Разница между thenAccept и thenApply
Я читаю документ на CompletableFuture
и описание для thenAccept()
является
Возвращает новый CompletionStage, который, когда этот этап завершается нормально, выполняется с результатом этого этапа в качестве аргумента для действия, которое было предоставлено.
и для thenApply()
является
Возвращает новое CompletionStage, которое, когда этот этап завершается нормально, выполняется с результатом этого этапа в качестве аргумента функции, поставляемой в комплекте. '' '
Может ли кто-нибудь объяснить разницу между этими двумя примерами?
Ответы
Ответ 1
Вам нужно посмотреть на полные подписи методов:
CompletableFuture<Void> thenAccept(Consumer<? super T> action)
<U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)
thenAccept
берет Consumer
и возвращает T=Void
CF, то есть тот, который не несет значения, только состояние завершения.
thenApply
с другой стороны, выполняет Function
и возвращает CF, несущий возвращаемое значение функции.
Ответ 2
thenApply
возвращает результат этапа thenAccept
тогда как thenAccept
- нет.
Прочтите эту статью: http://codeflex.co/java-multithreading-completablefuture-explained/
![CompletableFuture methods]()
Ответ 3
Как ясно из 8472, они различаются по их выходному значению и аргументам и, следовательно, что вы можете им делать
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
функции Apply применяют другую функцию и передают будущее, имеющее значение
функции Accept потребляют это значение и возвращают будущие пустоты