可以使用Java 8的Lambda表达式和Stream API来实现该需求,具体代码如下:

BigDecimal totalQuantity = realDiff.stream()
                .filter(item -> !"026000010003".equals(item.getBillOfMaterialComponent()))
                .map(item -> new BigDecimal(item.getBillOfMaterialItemQuantity()))
                .reduce(BigDecimal.ZERO, BigDecimal::add);

解释一下代码:

  1. 首先使用stream()方法将List转为Stream对象,方便后续处理。

  2. 使用filter()方法过滤掉BillOfMaterialComponent为"026000010003"的记录。

  3. 使用map()方法将BillOfMaterialItemQuantity转为BigDecimal类型。

  4. 使用reduce()方法对所有记录进行求和操作,初始值为0,累加器使用BigDecimal的add()方法。

最后得到的totalQuantity即为所有符合条件的BillOfMaterialItemQuantity的总和,且不会损失精度

java 8从ListOdsMaterialbomItem realDiff中获取字段BillOfMaterialComponent不等于026000010003的BillOfMaterialItemQuantity并合计字段Material是唯一的字段quantityInEntryUnit是String类型不能损失精度

原文地址: http://www.cveoy.top/t/topic/huGX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录