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值。
添加回答
舉報