java 8从ListOdsMaterialbomItem realDiff中获取字段BillOfMaterialComponent不等于026000010003的BillOfMaterialItemQuantity并合计字段Material是唯一的字段quantityInEntryUnit是String类型不能损失精度
可以使用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);
解释一下代码:
-
首先使用stream()方法将List转为Stream对象,方便后续处理。
-
使用filter()方法过滤掉BillOfMaterialComponent为"026000010003"的记录。
-
使用map()方法将BillOfMaterialItemQuantity转为BigDecimal类型。
-
使用reduce()方法对所有记录进行求和操作,初始值为0,累加器使用BigDecimal的add()方法。
最后得到的totalQuantity即为所有符合条件的BillOfMaterialItemQuantity的总和,且不会损失精度
原文地址: http://www.cveoy.top/t/topic/huGX 著作权归作者所有。请勿转载和采集!