Итак, проблема в том, что +
, -
, *
, /
, ... не работают с BigDecimal
s. Вы должны использовать .add()
, .subtract()
, .multiply()
, .divide()
, ... методы для расчетов.
Если это возможно, вы можете использовать BigDecimal.longValue()
или BigDecimal.longValueExact()
, чтобы преобразовать BigDecimal
s в длинные значения и использовать их в своих вычислениях:
Map<Tuple1<String>, LongSummaryStatistics> grouped = join.stream()
.collect(Collectors.groupingBy(Tuples::of,
() -> new TreeMap<>(comparator),
Collectors.summarizingLong(t -> t.get2().getLDiscount().longValue() *
(1 - t.get2().getLDiscount().longValue()))
));
В качестве альтернативы вы можете выполнить весь расчет с помощью BigDecimal
и преобразовать значение в long в конце:
Map<Tuple1<String>, LongSummaryStatistics> grouped = join.stream()
.collect(Collectors.groupingBy(Tuples::of,
() -> new TreeMap<>(comparator),
Collectors.summarizingLong(t -> t.get2().getLDiscount()
.multiply(BigDecimal.ONE
.subtract(t.get2().getLDiscount())).longValue())
));
Если оба решения не работают для вас, вы должны написать собственную коллекцию для BigDecimalSummaryStatistics
или просто рассчитать нужные значения напрямую. Вы можете прочитать этот вопрос для суммирования BigDecimal
значений с помощью Java Stream.