Выбор ответа 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 не гарантирует порядок встречи: элементы обрабатываются разными потоками.
Варианты ответа
- Строго 10, 20, 30, 40 в порядке списка
- Числа 10, 20, 30, 40 в непредсказуемом порядкеправильный ответ
- Строго 40, 30, 20, 10 из-за разбиения с конца
- Ничего: в параллельном стриме forEach не выполняется
Разбор
В параллельном стриме forEach не гарантирует порядок встречи: элементы обрабатываются разными потоками. Порядок источника сохраняет forEachOrdered (ценой части параллелизма) или сбор в список через toList(), который учитывает порядок. Сам результат map от порядка не зависит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.