Метод ifPresentOrElse
Метод ifPresentOrElse класса Optional позволяет выполнить
одно действие, если значение в контейнере присутствует, и другое
действие, если значение отсутствует. В первый параметр мы передаем
функциональный интерфейс Consumer, который будет вызван
с непустым значением. Во второй параметр мы передаем функциональный
интерфейс Runnable, который будет вызван, если контейнер пуст.
Метод является более удобной альтернативой связке isPresent
и orElse, когда нужно выполнить разные побочные действия,
а не просто вернуть значение.
Синтаксис
optional.ifPresentOrElse(action, emptyAction)
Пример
Давайте создадим непустой Optional и выполним разные действия
для присутствующего и отсутствующего значения:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.of("abcde");
opt.ifPresentOrElse(
value -> System.out.println("Value: " + value),
() -> System.out.println("Empty")
);
}
}
Результат выполнения кода:
"Value: abcde"
Пример
Давайте создадим пустой Optional и выполним разные действия:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.empty();
opt.ifPresentOrElse(
value -> System.out.println("Value: " + value),
() -> System.out.println("Empty")
);
}
}
Результат выполнения кода:
"Empty"
Пример
Давайте используем ifPresentOrElse для обработки значения
из списка и выведем результат в консоль:
import java.util.List;
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("abcde", "12345");
Optional<String> res = list.stream().findFirst();
res.ifPresentOrElse(
value -> System.out.println("Found: " + value),
() -> System.out.println("Not found")
);
}
}
Результат выполнения кода:
"Found: abcde"