Всем привет, продолжая идти по темам в закрепе, сегодня пара слов про Optional



1. orElse() против orElseGet()
Метод `orElse()` создает объект по умолчанию всегда, даже если значение внутри есть.

// someMethod() вызовется в любом случае
Optional.of("val").orElse(someMethod());

Используй orElseGet(() -> someMethod()). Он выполнит код только для пустой коробки.

2. Метод stream() (Java 9+)
Позволяет превратить список из `Optional` в обычный список без пустых значений одной строчкой:

List<User> users = listOfOptionals.stream()
.flatMap(Optional::stream)
.toList();

3. Цепочка поиска or() (Java 11)
Если первый источник данных вернул пустоту, пробуем второй:

findInCache().or(this::findInDb).or(this::defaultValue);

4. ifPresentOrElse()
Выполняет одно действие, если значение есть, и другое — если его нет:

optUser.ifPresentOrElse(
user -> System.out.println(user.getName()),
() -> System.out.println("Not found")
);

5. Главное правило: не клади Optional в поля класса
* Сериализация: Класс `Optional` не реализует интерфейс `Serializable`. Если сделать такое поле в объекте, приложение упадет при попытке отправить его через сеть или сохранить.
* Производительность: Создается лишний объект-обертка.
* Где использовать: Только как возвращаемый тип методов

(`Optional<User> findById(...)`).
Просмотры: 42
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти