Streams Начинающий

Обработка обоих случаев Optional — наличие и отсутствие значения — в одном вызове.

✕ Java 8
Optional<User> user = findUser(id);
if (user.isPresent()) {
    greet(user.get());
} else {
    handleMissing();
}
✓ Java 9+
findUser(id).ifPresentOrElse(
    this::greet,
    this::handleMissing
);
Заметили проблему в этом коде? Сообщите нам.
📏

Единое выражение

Оба случая обрабатываются в одном вызове метода.

🚫

Без get()

Устраняет опасный паттерн isPresent() + get().

🔗

Цепочный

Естественно связывается после findUser() или любого метода, возвращающего Optional.

Старый подход
if/else с Optional
Современный подход
ifPresentOrElse()
Начиная с JDK
9
Сложность
Начинающий
Optional.ifPresentOrElse()
Доступно

Широко доступно с JDK 9 (сент. 2017)

ifPresentOrElse() принимает Consumer для случая наличия значения и Runnable для случая пустого Optional. Устраняет антипаттерн isPresent/get.