1 回答

TA贡献1803条经验 获得超3个赞
所以问题是 , +, -, *, /... 不与BigDecimals 一起工作。您必须使用.add(), .subtract(), .multiply(), .divide(), ... 方法进行计算。
如果可能,您可以使用BigDecimal.longValue()orBigDecimal.longValueExact()将BigDecimals 转换为 long 值以在计算中使用它们:
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()))
));
或者,您可以使用 du 整个计算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或直接计算您需要的值。您可以阅读此问题以使用 Java Stream 汇总BigDecimal值。
添加回答
举报