Выбор ответа Senior Лямбды и Stream API обновлено

forEach и forEachOrdered в parallel

Вопрос

Что напечатает List.of(1, 2, 3, 4).parallelStream().map(x -> x * 10).forEach(System.out::println)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Числа 10, 20, 30, 40 в непредсказуемом порядке. В параллельном стриме forEach не гарантирует порядок встречи: элементы обрабатываются разными потоками.

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

  1. Строго 10, 20, 30, 40 в порядке списка
  2. Числа 10, 20, 30, 40 в непредсказуемом порядкеправильный ответ
  3. Строго 40, 30, 20, 10 из-за разбиения с конца
  4. Ничего: в параллельном стриме forEach не выполняется

Разбор

В параллельном стриме forEach не гарантирует порядок встречи: элементы обрабатываются разными потоками. Порядок источника сохраняет forEachOrdered (ценой части параллелизма) или сбор в список через toList(), который учитывает порядок. Сам результат map от порядка не зависит.

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

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