Метод thenApply
Метод thenApply класса CompletableFuture применяет
заданную функцию к результату завершенной асинхронной задачи
и возвращает новый объект CompletableFuture, содержащий
преобразованное значение. В первый параметр мы передаем функцию
типа Function, которая принимает результат исходной задачи
и возвращает новое значение. Метод не блокирует поток, а выполняется
асинхронно после завершения исходного CompletableFuture.
Если исходный CompletableFuture завершился с исключением,
то переданная функция не вызывается, а исключение пробрасывается
в результирующий CompletableFuture.
Синтаксис
CompletableFuture<U> thenApply(Function<? super T, ? extends U> fn)
Пример
Давайте создадим асинхронную задачу, которая возвращает число,
а затем с помощью thenApply преобразуем это число в строку:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5);
CompletableFuture<String> res = future.thenApply(num -> "value: " + num);
System.out.println(res.join());
}
}
Результат выполнения кода:
"value: 5"
Пример
Давайте применим цепочку из нескольких thenApply,
чтобы последовательно преобразовать результат:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5);
CompletableFuture<Integer> res = future
.thenApply(num -> num * 2)
.thenApply(num -> num + 3);
System.out.println(res.join());
}
}
Результат выполнения кода:
13
Пример
Давайте преобразуем строку в ее длину с помощью thenApply:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "abcde");
CompletableFuture<Integer> res = future.thenApply(str -> str.length());
System.out.println(res.join());
}
}
Результат выполнения кода:
5
Смотрите также
-
класс
CompletableFuture,
который представляет асинхронную задачу -
метод
supplyAsync,
который создает асинхронную задачу с результатом -
метод
thenCompose,
который связывает две асинхронные задачи -
метод
thenAccept,
который потребляет результат без возврата значения