Optional, который часто ловит даже опытных.Многие пишут так:
Optional<String> optional = getValue();
if (optional.isPresent()) {
doSomething(optional.get());
}
⚠️ Это антипаттерн! Вы теряете суть
Optional и рискуете ошибками в многопоточке.📌 Правильный способ — использовать функциональный стиль:
getValue().ifPresent(this::doSomething);
Или ещё элегантнее:
getValue()
.map(this::transform)
.filter(this::isValid)
.ifPresent(this::doSomething);
💡 Подходы:
-
map для преобразования значения-
filter для отсеивания ненужных-
orElse, orElseGet, orElseThrow для обработки отсутствия-
ifPresentOrElse в Java 9+ для двух вариантов действий📈 Выгоды:
- Код становится компактнее
- Безопаснее при рефакторинге
- Лучше для чтения в потоковых операциях (
Stream API)🛠 Если нужно вынуть значение — используйте
orElseThrow() вместо .get():
String value = getValue().orElseThrow(() -> new IllegalStateException("Value not found"));
👉 Отказывайтесь от
.isPresent() и .get() связки — используйте силу функционального подхода! 🚀👉@BookJava
