亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

lambda 表達式中的錯誤返回類型:BigDecimal 無法轉換為 long

lambda 表達式中的錯誤返回類型:BigDecimal 無法轉換為 long

慕標5832272 2022-12-15 16:44:28
我試圖通過加速在 java 流中編寫查詢。當我嘗試sum (l_extendedprice * (1 - l_discount))選擇時,出現此錯誤:lambda 表達式中的錯誤返回類型:BigDecimal 無法轉換為 long。運算符“-”不能應用于“int”、“java.math.BigDecimal”。我的代碼是這樣的:JoinComponent joinComponent = app.getOrThrow(JoinComponent.class);Join<Tuple6<Customer, Orders, Lineitem, Supplier, Nation, Region>> join = joinComponent        .from(CustomerManager.IDENTIFIER)        .innerJoinOn(Orders.O_CUSTKEY).equal(Customer.C_CUSTKEY)        .where(Orders.O_ORDERDATE.greaterOrEqual(sqlDate))        .where(Orders.O_ORDERDATE.lessThan(sqlDate2))        .innerJoinOn(Lineitem.L_ORDERKEY).equal(Orders.O_ORDERDATE)        .innerJoinOn(Supplier.S_SUPPKEY ).equal(Customer.C_NATIONKEY)        .innerJoinOn(Nation.N_NATIONKEY).equal(Supplier.S_NATIONKEY)        .innerJoinOn(Region.R_REGIONKEY).equal(Nation.N_REGIONKEY)        .where(Region.R_NAME.equal("ASIA"))        .build(Tuples::of);Comparator<Tuple1<String>> comparator = Comparator        .comparing((Function<Tuple1<String>, String>) Tuple1::get0)        .thenComparing(Tuple1::get0);Map<Tuple1<String>, LongSummaryStatistics> grouped = join.stream()        .collect(groupingBy(t -> Tuples.of(t.get4().getNName()),                () -> new TreeMap<>(comparator),                summarizingLong(t->t.get2().getLDiscount()*(1-t.get2().getLDiscount()))        ));我該如何解決這個問題?
查看完整描述

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值。


查看完整回答
反對 回復 2022-12-15
  • 1 回答
  • 0 關注
  • 249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號