Используется для избежания проверок на Null.
В местах где мы возвращали null нужно возвращать Option.empty().
Optional.of(name) - если объект будет null получим NullPointerException.
Optional.ofNullable(name) - если объект будет null получим пустой Option.
Optional.empty() - пустой Optional.
.or(Supplier<? extends Optional<? extends T>> supplier) - это метод для подстановки другого Optional, если текущий пустой. Ленивый - выполниться только если Optional пустой.
Optional<String> a = Optional.empty();
Optional<String> b = Optional.of("fallback");
Optional<String> result = a.or(() -> b);
// result = Optional["fallback"]
.orElse(value) – возвращает текущее значение, иначе возвращается указанное значение. Значение вычисляется всегда, даже если Optional не пуст.
String text = null;
String result = Optional.ofNullable(text).orElse("default");
orElseGet(Supplier<? extends T>) – если значение присутствует, оно возвращается, иначе вызывается переданный метод(лямбда-функция).
String text = null;
String result = Optional.ofNullable(text).orElseGet(() -> "default");
orElseThrow(Supplier<Exception>) – если значение отсутствует, выбрасывается исключение.
String text = null;
String result = Optional.ofNullable(text).orElseThrow(() -> new Exception("error"));
.isPresent() - получение boolean присутствует ли значение.
.isEmpty() - получение boolean отсутствует ли значение.
ifPresent() - позволяет выполнить действие (Consumer) над значением, если оно существует, избегая явных проверок на null.
.ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) - заменяет комбинацию ifPresent() и orElse()(...).
Optional.ofNullable(user)
.map(User::getProfile)
.map(Profile::getEmail)
.orElse("unknown@mail.com");