Контейнер Optional в Java
Контейнер Optional хранит либо одно значение типа
T, либо ничего. Метод, который может не найти
результат, возвращает не null, а объект, из
которого видно: значение есть или его нет. Так проще
читать сигнатуру и не забыть проверку перед точкой.
Тип лежит в пакете java.util и появился в Java 8.
Он не заменяет все проверки на null, но удобен
для возврата из метода поиска: имя пользователя по id,
первая подходящая запись, разбор необязательного поля.
Поиск заголовка по коду может вернуть пустой контейнер,
если записи нет. Снаружи с результатом работают через
проверку или запасное значение, а не через рискованный
get на null:
import java.util.Optional;
Optional<String> findTitle(int id) {
if (id == 1) {
return Optional.of("News");
}
return Optional.empty();
}
void demo() {
Optional<String> title = findTitle(2);
System.out.println(title.orElse("unknown"));
}
Для id без записи в консоли будет "unknown".
Программа не упала на разыменовании: отсутствие заложено
в тип возврата, а не спрятано в null.
Дальше разберем создание контейнера, проверки, извлечение
значения и цепочки map и flatMap без
вложенных if на каждом шаге.