Разница между orElse() и orElseGet() в Java заключается в том, как они вычисляют значение по умолчанию. 14
orElse() возвращает значение из контейнера, если оно есть, или значение по умолчанию, если объект отсутствует. 3 При этом значение по умолчанию вычисляется сразу, независимо от того, содержит ли Optional значение или нет. 4 Метод orElse() полезен, когда необходимо иметь заранее определённое значение для случая отсутствия данных. 3
orElseGet() похож на orElse(), но вместо того, чтобы сразу вернуть значение по умолчанию, он вызывает функцию (интерфейс Supplier), которая его генерирует. 3 Функция вызывается только в случае, если Optional пустой, что позволяет избежать ненужных вычислений, если значение присутствует. 4 Метод orElseGet() удобен, когда нужно выполнить дополнительную логику при отсутствии значения. 3
Таким образом, orElse() подходит, когда значение по умолчанию — это простая константа, а orElseGet() — когда необходимо выполнить вычисления для значения по умолчанию. 4