Выбор ответа Middle Лямбды и Stream API обновлено
Порядок обработки элементов
Вопрос
Что напечатает код?
Stream.of(1, 2, 3)
.filter(x -> { System.out.print("f" + x + " "); return x % 2 == 1; })
.map(x -> { System.out.print("m" + x + " "); return x; })
.toList();
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: f1 m1 f2 f3 m3. Стрим обрабатывает элементы по одному через весь конвейер: 1 проходит filter (f1) и map (m1), 2 проходит filter (f2) и отсеивается, 3 проходит оба (f3 m3).
Варианты ответа
f1 f2 f3 m1 m3f1 m1 f2 f3 m3правильный ответm1 m3 f1 f2 f3f1 m1 f2 m2 f3 m3
Разбор
Стрим обрабатывает элементы по одному через весь конвейер: 1 проходит filter (f1) и map (m1), 2 проходит filter (f2) и отсеивается, 3 проходит оба (f3 m3). Вариант «сначала весь filter, потом весь map» описывает работу коллекций по шагам, а не ленивые стримы. Двойка до map не доходит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.