Объясните пожалуйста разницу между reduction и mutable reduction. В документации Oracle описано, метод класса Stream reduce() это reduction, метод collect() -это mutable reduction.
int sum = numbers.stream().reduce(0, Integer::sum)
Здесь понятно, что из множества значений получают одно - сумму. Т.е "сократили".
Не понятно, в чём заключается reduction в случае с collect(). Я воспринимаю метод collect() просто как способ конвертации потока в коллекцию. Г.Шилдт в русской редации Полного руководства Java8 даёт определение потока "как последовательность объектов.В самом потоке данные не хранятся, а только перемещаются". Т.е попросту поток "разложили по полочкам" внутри коллекции. Было 5 эл-ов в потоке, стало 5 эл-ов в колекции. Образно говоря: Есть источник данных - файл, исходная коллекция, массив. Это бочка с водой. Присоединён шланг - это поток. Из шланга вода разливается по бутылкам - коллекция.
Обе эти терминальные операции reduce() и collect() преобразуют значения в стриме в результирующий объект, только в случае случае с reduce() обычно получается иммутабельный объект, а в случае с collect() - потенциально мутабельный
——
Достаточно неплохо об этом написано в javadoc
Продвижение своими сайтами как стратегия роста и независимости