Рубрики
Без рубрики

Добавить BigDecimals с помощью API потока

В то время как API потоков предоставляет полезный способ расчета суммы некоторых числовых типов, BigDecimal не поддерживается. Здесь мы узнаем, как рассчитать суммы с сокращением.

Автор оригинала: baeldung.

1. Обзор

Обычно мы используем API Java Stream для обработки коллекций данных.

Одной из хороших особенностей является поддержка операций на числовом потоки, как сумма операция. Тем не менее, мы не можем обрабатывать все числовые типы таким образом.

В этом учебнике мы увидим, как выполнить сумма операции на потоках чисел, таких как БигДекимальные .

2. Как мы обычно Сумма поток

API Stream предоставляет потоки чисел, в том числе IntStream, DoubleStream, и ЛонгСтрим.

Давайте напомним себе, как они работают c повторное повторное числовой поток. Затем мы вычислите его общее количество с IntStream-сумма :

IntStream intNumbers = IntStream.range(0, 3);
assertEquals(3, intNumbers.sum());

Мы можем сделать то же самое, начиная со списка Двойное секунда. Используя потоки, мы можем преобразовать из потока объектов в Двойной поток с помощью картаToDouble :

List doubleNumbers = Arrays.asList(23.48, 52.26, 13.5);
double result = doubleNumbers.stream()
    .mapToDouble(Double::doubleValue)
    .sum();
assertEquals(89.24, result, .1);

Так что было бы полезно, если бы мы могли подвести итоги сбора БигДекимальные номера таким же образом.

К сожалению, нет БигДекимальСтрим. Итак, нам нужно другое решение.

3. Использование уменьшить добавить BigDecimal номера

Вместо того, чтобы полагаться сумма , мы можем использовать Stream.reduce :

Stream intNumbers = Stream.of(5, 1, 100);
int result = intNumbers.reduce(0, Integer::sum);
assertEquals(106, result);

Это работает на все, что может быть логически вместе , в том числе БигДекимальные :

Stream bigDecimalNumber = 
  Stream.of(BigDecimal.ZERO, BigDecimal.ONE, BigDecimal.TEN);
BigDecimal result = bigDecimalNumber.reduce(BigDecimal.ZERO, BigDecimal::add);
assertEquals(11, result);

уменьшить метод занимает два параметра:

  • Идентификационный – это эквивалент 0 – это стартовая стоимость для сокращения
  • Функция аккумулятора – занимает два параметра, результат до сих пор, и следующий элемент потока

4. Заключение

В этой статье мы рассмотрели, как найти сумму некоторых чисел в числовом Поток . Затем мы обнаружили, как использовать уменьшить в качестве альтернативы.

Использование уменьшить позволяет подвести итоги сбора БигДекимальные Числа. Он может быть применен к любому другому типу.

Как всегда, код для примеров доступен более на GitHub .