В Java 8 Stream имеет метод уменьшения:
T reduce(T identity, BinaryOperator<T> accumulator);
Является ли оператором аккумулятора разрешено изменять любой из его аргументов? Я предполагаю, что с тех пор, как JavaDoc говорит, что аккумулятор должен быть NonInterfering, хотя все примеры говорят об изменении коллекции, а не о модификации элементов коллекции.
Итак, для конкретного примера, если мы имеем
integers.reduce(0, Integer::sum);
и предположим на мгновение, что Integer
был изменчивым, разрешалось бы sum
изменять свой первый параметр, добавляя к нему (на месте) значение его второго параметра?
Я полагаю, что нет, но я хотел бы также привести пример того, где это вмешательство вызывает проблему.