Метод thenAccept
Метод thenAccept класса CompletableFuture используется
для выполнения действия над результатом асинхронной операции.
В отличие от метода thenApply, который возвращает новое
значение, метод thenAccept ничего не возвращает
(возвращает CompletableFuture<Void>). В первый параметр
мы передаем функцию-потребитель (Consumer), которая
принимает результат предыдущей операции и выполняет над ним
какие-либо действия, например, выводит в консоль. Второй
параметр опциональный - это Executor, в котором будет
выполняться переданная функция.
Синтаксис
completableFuture.thenAccept(action)
completableFuture.thenAccept(action, executor)
Пример
Давайте создадим асинхронную задачу, которая возвращает
число 5, и обработаем результат с помощью
thenAccept, выведя его в консоль:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5);
CompletableFuture<Void> res = future.thenAccept(value -> {
System.out.println("Result: " + value);
});
res.join();
}
}
Результат выполнения кода:
"Result: 5"
Пример
Давайте обработаем строку "abcde", полученную
асинхронно, и выведем её длину:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "abcde");
future.thenAccept(str -> {
System.out.println("Length: " + str.length());
}).join();
}
}
Результат выполнения кода:
"Length: 5"
Пример
Давайте посмотрим, что метод thenAccept возвращает
CompletableFuture<Void>, поэтому получить из него
значение нельзя, но можно дождаться завершения:
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args)
{
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 12345);
CompletableFuture<Void> res = future.thenAccept(value -> {
System.out.println("Value: " + value);
});
System.out.println("Done: " + res.join());
}
}
Результат выполнения кода:
"Value: 12345"
"Done: null"
Смотрите также
-
класс
CompletableFuture,
который представляет асинхронную операцию -
метод
thenApply,
который преобразует результат операции -
метод
thenRun,
который выполняет действие без результата -
метод
supplyAsync,
который запускает асинхронную задачу с результатом