当前位置: 首页 > 知识库问答 >
问题:

将Double的映射与Java流相加为聚合的BigDecimal[duplicate]

慕宪
2023-03-14
BigDecimal totalCost = order.getOrderlineList().stream()
    .mapToDouble(Orderline::getPrice)
    .sum();

共有1个答案

甄永年
2023-03-14

您应该使用bigdecimal.add()添加bigdecimal,而不是将它们转换为double和back以避免舍入错误。要将所有价格相加,可以使用stream.reduce():

BigDecimal bigDecimal = order.getOrderLines().stream()
        .map(OrderLine::getPrice)
        .reduce(BigDecimal.ZERO, BigDecimal::add);

stream.reduce()的文档中:

使用提供的标识值和关联累加函数对此流的元素执行约简,并返回约简后的值。这相当于:

T result = identity;
for (T element : this stream)
    result = accumulator.apply(result, element)
return result;
 类似资料:
  • 假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?

  • 问题内容: 当用的输入用和与输入不同的结果似乎出现。 x输出为 当y是 我说这是因为双重不准确性吗?但是由于这是一个,不应该一样吗? 问题答案: 我说这是因为双重不精确吗? 您绝对正确,这完全是由于的不精确。 但是由于这是一个,不应该一样吗? 不,不应该。在创建时就引入了错误,因为常量已经嵌入了错误。到那时,您无法采取任何措施来修复此表示错误:当时那匹众所周知的马已经离开了谷仓,所以现在关门已经太

  • 我有一个实体,看起来像这样: 输入数据是一个

  • 问题内容: 我必须计算一些浮点变量,而我的同事建议我使用而不是,因为这样会更精确。但是我想知道它是什么以及如何最大程度地利用它? 问题答案: 是表示数字的精确方法。A 具有一定的精度。由于幅值之差太大,求和时使用不同倍数(例如和)的双精度可能会导致它们一起下降。有了这不会发生。 的缺点是,它是较慢的,和它有点更难以程序算法的方式(由于不被过载)。 如果你要花钱,或必须精打细算,请使用。否则往往就足

  • 我有一个列表 >输入,如下所示: 我试图通过对CURRENCY、PUBLISH_REGION、SOURCE和RECON_STATUS列进行分组来创建另一个列表 >。并将所有唯一状态值作为数据透视添加到输出映射中,并使用JOB_ID_COUNT汇总/聚合计数。 我期待以下响应:输出: 尝试按多个映射字段分组时,我遇到编译时错误。单字段groupingBy工作正常。任何帮助都是非常有效的。

  • 问题内容: 在经历了以前的开发工作的代码折磨之后,我意识到我需要移动所有基于资金的列,以不使用浮点数学。在Java方面,这意味着使用BigDecimal,但在使用Hibernate / JPA和MySQL 5时,适合该列的MySQL数据类型是什么? 问题答案: 十进制和数字。 对于DECIMAL和NUMERIC类型,建议的Java映射是java.math.BigDecimal。java.math.