Streams Средний

Цепочка запасных вариантов Optional без вложенных проверок.

✕ Java 8
Optional<Config> cfg = primary();
if (!cfg.isPresent()) {
    cfg = secondary();
}
if (!cfg.isPresent()) {
    cfg = defaults();
}
✓ Java 9+
Optional<Config> cfg = primary()
    .or(this::secondary)
    .or(this::defaults);
Заметили проблему в этом коде? Сообщите нам.
🔗

Цепочный

Выстраивать запасные варианты в читаемый пайплайн.

Ленивое вычисление

Supplier запасного варианта выполняется только при необходимости.

📖

Декларативный

Читается как 'попробуй основное, или вторичное, или по умолчанию'.

Старый подход
Вложенный запасной вариант
Современный подход
Цепочка .or()
Начиная с JDK
9
Сложность
Средний
Optional.or() как запасной вариант
Доступно

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

Optional.or() возвращает исходный Optional, если он содержит значение, в противном случае вычисляет Supplier для получения альтернативного Optional. Supplier-ы ленивы — они вызываются только при необходимости.