Другие известные мне технологии (.Net, JS) содержат простейшую операцию сворачивания / уменьшения:
TResult reduce(TResult result, (TResult prevResult, TValue value) -> TResult)
Один из найденных мною методов требует, чтобы TValue и TResult были одного типа.Другой требует предоставления BinaryOperation, который объединяет 2 TResults.Ни одно из этих ограничений не соответствует моему контексту.На данный момент я получил код:
Accumulator acc = someInitialValue;
for(Element element: list) {
accumulator = reducer(accumulator, element);
}
, но я считаю, что базовый метод должен содержаться в потоковом API.
Я также посмотрел на сборщики, но у меня нетничего полезного не нашел.