CompletableFuture.thenApply()
Добавляет шаг, который преобразует результат, когда тот будет готов.
Доступно с: Java 8
Синтаксис
<U> CompletableFuture<U> thenApply(Function<? super T, ? extends U> fn)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| fn | Function<? super T, ? extends U> | Преобразование готового результата. |
Возвращаемое значение
CompletableFuture<U>Новый `CompletableFuture` с преобразованным результатом.
Примеры
Цепочка шагов:
void main() {
int length = CompletableFuture.supplyAsync(() -> " Hello, async world ")
.thenApply(String::strip)
.thenApply(String::length)
.join();
IO.println(length);
}Результат:
18Обработка ошибки в цепочке:
void main() {
String result = CompletableFuture.supplyAsync(() -> Integer.parseInt("oops"))
.thenApply(n -> "number " + n)
.exceptionally(e -> "failed: " + e.getCause().getMessage())
.join();
IO.println(result);
}Результат:
failed: For input string: "oops"Примечания
Это аналог map() для будущего результата. Если функция сама возвращает CompletableFuture, используйте thenCompose(); если результат не нужен дальше — thenAccept(). Ошибка на любом шаге пропускает следующие thenApply() и попадает в exceptionally() или handle().
См. также
- CompletableFuture.supplyAsync() — Запускает вычисление асинхронно и возвращает `CompletableFuture`.
- CompletableFuture.thenCombine() — Объединяет результаты двух независимых задач, когда готовы обе.
- Stream.map() — Преобразует каждый элемент потока.
Вопросы и ответы по теме
В учебнике
- CompletableFuture — Асинхронные цепочки в Java — CompletableFuture.supplyAsync, thenApply, thenAccept, thenCombine, allOf, обработка ошибок через exceptionally и join.