РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1077 of 1163 menu

Метод handle

Метод handle класса CompletableFuture позволяет обработать как успешный результат, так и возникшее исключение. В первый параметр мы передаем функцию BiFunction, которая принимает результат и исключение, а возвращает новое значение. Метод возвращает новый объект CompletableFuture с преобразованным результатом. В отличие от thenApply, метод handle вызывается всегда, даже если исходный CompletableFuture завершился с ошибкой.

Синтаксис

CompletableFuture<U> handle(BiFunction<? super T, Throwable, ? extends U> fn)

Пример

Давайте обработаем успешный результат с помощью метода handle:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "abcde"); CompletableFuture<String> res = future.handle((value, ex) -> { if (ex != null) { return "error"; } return value.toUpperCase(); }); System.out.println(res.join()); } }

Результат выполнения кода:

"ABCDE"

Пример

Давайте обработаем исключение, возникшее при выполнении задачи:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("something went wrong"); }); CompletableFuture<String> res = future.handle((value, ex) -> { if (ex != null) { return "handled: " + ex.getMessage(); } return value; }); System.out.println(res.join()); } }

Результат выполнения кода:

"handled: something went wrong"

Пример

Давайте вернем числовой результат при успехе и 0 при ошибке:

import java.util.concurrent.CompletableFuture; public class Main { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 5); CompletableFuture<Integer> res = future.handle((value, ex) -> { if (ex != null) { return 0; } return value * 2; }); System.out.println(res.join()); } }

Результат выполнения кода:

10

Смотрите также

  • метод thenApply,
    который преобразует результат при успешном выполнении
  • метод exceptionally,
    который обрабатывает только исключение
  • метод whenComplete,
    который выполняет действие без изменения результата
  • метод join,
    который ожидает завершения и возвращает результат
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить