Есть ли самый простой способ уменьшить / сложить в Java? - PullRequest
2 голосов
/ 30 мая 2019

Другие известные мне технологии (.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.

Я также посмотрел на сборщики, но у меня нетничего полезного не нашел.

1 Ответ

4 голосов
/ 30 мая 2019

Что вам нужно, так это среда Java Stream, добавленная в Java 8.

Класс Stream имеет 3 reduce методы:

Второй метод reduce соответствует вашему примеру, но требует того же типа результата. Для другого типа результата вам нужно использовать третий метод reduce, для которого требуется дополнительный метод combiner, поскольку он должен поддерживать параллельную обработку.


Он также имеет 2 collect методов:

Первый метод collect является наиболее часто используемым при использовании в сочетании с заводским классом Collectors.

...