Встречается на собеседованиях • сегодня

Может ли Lambda выражение хранить состояние

Лямбда-выражения в Java по умолчанию не хранят состояние, так как они должны быть stateless (без состояния) для корректной работы в функциональных интерфейсах. Однако, если переменная, захваченная лямбдой, является effectively final (или final), лямбда может "видеть" её значение, но не изменять.

Но можно эмулировать состояние через массив или объект-обёртку:

java
int[] counter = {0}; // массив как обёртка
Runnable r = () -> counter[0]++;
r.run();
System.out.println(counter[0]); // 1

Или через класс:

java
class Holder {
    int value;
}

Holder holder = new Holder();
Runnable r = () -> holder.value++;
r.run();
System.out.println(holder.value); // 1

Важно: такое использование противоречит принципам функционального программирования и может привести к race condition в многопоточной среде. Для хранения состояния лучше использовать другие подходы (например, AtomicInteger).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы