Метод orElseGet
Метод orElseGet класса Optional возвращает значение,
которое хранится внутри контейнера, если оно присутствует.
Если же Optional пуст, метод вызывает переданную
функцию-поставщика Supplier и возвращает её результат.
В параметр мы передаём функцию, которая будет вызвана только
при отсутствии значения. Это отличает метод от orElse,
где значение-запасной вариант вычисляется всегда.
Синтаксис
optional.orElseGet(supplier)
Пример
Давайте получим значение из непустого Optional.
Функция-поставщик при этом не будет вызвана:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.of("abcde");
String res = opt.orElseGet(() -> "12345");
System.out.println(res);
}
}
Результат выполнения кода:
"abcde"
Пример
А теперь получим значение из пустого Optional.
В этом случае сработает функция-поставщик:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.empty();
String res = opt.orElseGet(() -> "12345");
System.out.println(res);
}
}
Результат выполнения кода:
"12345"
Пример
Давайте убедимся, что функция-поставщик вызывается
только при пустом Optional:
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
Optional<String> opt = Optional.of("abcde");
String res = opt.orElseGet(() -> {
System.out.println("Supplier called");
return "12345";
});
System.out.println(res);
}
}
Результат выполнения кода:
"abcde"
Смотрите также
-
метод
orElse,
который возвращает запасное значение напрямую -
метод
orElseThrow,
который выбрасывает исключение при отсутствии значения -
метод
get,
который возвращает значение из Optional -
класс
Optional,
который представляет контейнер для значения