Выбор ответа 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).

Варианты ответа

  1. f1 f2 f3 m1 m3
  2. f1 m1 f2 f3 m3правильный ответ
  3. m1 m3 f1 f2 f3
  4. f1 m1 f2 m2 f3 m3

Разбор

Стрим обрабатывает элементы по одному через весь конвейер: 1 проходит filter (f1) и map (m1), 2 проходит filter (f2) и отсеивается, 3 проходит оба (f3 m3). Вариант «сначала весь filter, потом весь map» описывает работу коллекций по шагам, а не ленивые стримы. Двойка до map не доходит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.