junior
Что такое Optional?
Optional<T> — контейнер-обёртка, который может содержать или не содержать ненулевое значение. Он предоставляет декларативный способ работы с потенциально отсутствующими значениями вместо ручных if (x != null) проверок, что снижает вероятность NullPointerException.
Аналогия из жизни:
Optional— это коробка, на которой написано «может быть пустой». Прежде чем достать содержимое, вы проверяете, есть ли что-то внутри, или определяете, что делать, если коробка пуста.
Пример
Optional<String> optional = Optional.of("hello");
optional.isPresent(); // true
optional.ifPresent(s -> System.out.println(s)); // hello
optional.get(); // "hello"
optional.orElse("default"); // "hello"
optional.map(String::toUpperCase).orElse(""); // "HELLO"
Основные способы создания
| Метод | Описание |
|---|---|
Optional.of(value) |
Оборачивает ненулевое значение (NPE если null) |
Optional.ofNullable(value) |
Оборачивает значение, допуская null |
Optional.empty() |
Возвращает пустой Optional |
Основные методы
| Метод | Описание |
|---|---|
isPresent() |
Возвращает true, если значение есть |
ifPresent(consumer) |
Выполняет действие, если значение есть |
get() |
Возвращает значение или бросает NoSuchElementException |
orElse(default) |
Возвращает значение или дефолт |
orElseGet(supplier) |
Возвращает значение или вычисляет дефолт лениво |
orElseThrow(supplier) |
Возвращает значение или бросает исключение |
map(function) |
Преобразует значение, если оно есть |
flatMap(function) |
Как map, но функция сама возвращает Optional |
filter(predicate) |
Возвращает Optional, если значение удовлетворяет условию |
На собеседовании: не используйте
Optionalкак поле класса, параметр метода или элемент коллекции — он предназначен исключительно для возвращаемых значений. Также важно различатьorElse()(вычисляет дефолт всегда) иorElseGet()(вычисляет лениво).