Optional в Java – не просто контейнер! Сегодня разберём важную тему:
Optional в Java – это не просто удобный способ избежать null, но и мощный инструмент для работы с потоками данных. 🚀 Как правильно использовать
Optional? 1️⃣ Избегаем
null-чеков Раньше код был полон
if (obj != null), но теперь:
Optional<String> name = Optional.ofNullable(user.getName());
name.ifPresent(System.out::println);
Это делает код чище и понятнее.
2️⃣ Комбинируем с
map() и flatMap() Если у нас есть объект, внутри которого другой объект, а внутри него – ещё один,
Optional поможет избежать вложенных if-else:
Optional<String> city = Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity);
Всё элегантно и лаконично!
3️⃣ Используем
orElse() и orElseGet() правильно ❌ Антипаттерн – всегда выполняет
new Object():
User user = optionalUser.orElse(new User());
✅ Лучше так –
orElseGet() вызовется только если optionalUser пуст:
User user = optionalUser.orElseGet(User::new);
Это особенно важно, если объект тяжёлый в создании.
4️⃣
orElseThrow() – избавляемся от null вообще Когда отсутствие значения – это ошибка, не бойтесь выбрасывать исключение:
User user = optionalUser.orElseThrow(() -> new RuntimeException("User not found"));
Это делает код безопаснее!
❌ Когда не стоит использовать
Optional? - В полях сущностей (например, JPA) – это может ухудшить производительность.
- Для коллекций – лучше возвращать пустую коллекцию, а не
Optional<List<T>>. 📲 Мы в MAX
👉@BookJava