Выбор ответа Middle Лямбды и Stream API спрашивают часто обновлено
orElse и orElseGet
Вопрос
Когда вызовется loadDefault() в optional.orElse(loadDefault())?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Всегда, даже если в Optional есть значение. Аргумент метода вычисляется до вызова, поэтому loadDefault() выполнится в любом случае, а результат просто будет отброшен, если значение есть.
Варианты ответа
- Всегда, даже если в Optional есть значениеправильный ответ
- Только если Optional пуст
- Никогда, если Optional создан через
Optional.of - Только при первом обращении, дальше значение кешируется
Разбор
Аргумент метода вычисляется до вызова, поэтому loadDefault() выполнится в любом случае, а результат просто будет отброшен, если значение есть. Если вычисление дорогое или с побочным эффектом, нужен orElseGet(this::loadDefault): Supplier вызывается только для пустого Optional. Никакого кеширования нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Функциональные интерфейсы и их методы
Следующий вопрос
Что выведет: orElse и orElseGet