Java Core trainee
В чём разница orElse и orElseGet?
Ответ
orElse(value) — eager: значение-аргумент вычисляется ВСЕГДА, даже если Optional не пустой. orElseGet(Supplier) — lazy: лямбда вызывается только если Optional пустой, поэтому для дорогих вычислений предпочтительнее orElseGet.
Разбор: orElse(value) принимает уже готовое значение, поэтому выражение-аргумент вычисляется до вызова метода и всегда, независимо от наличия значения в Optional. orElseGet(Supplier) откладывает вычисление и дёргает лямбду только при пустом Optional. Главная ловушка — считать orElse «ленивым»: на самом деле дорогой код в его аргументе выполнится даже при непустом Optional.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.