list.forEach(p->{ BigDecimal occupiedNum = BigDecimal.ZERO; // 初始化累加变量 occupiedNumList.forEach(o->{ System.out.println(p.getProductId()+"======="+o.getProductId()); System.out.println(p.getProductId().equals(o.getProductId())); if(p.getProductId().equals(o.getProductId())){ occupiedNum.add(o.getNum()); } }); p.setOccupiedQty(occupiedNum); }); 累加为0
时间: 2024-02-14 09:04:13 浏览: 62
Effective-Java-2nd-Edition-(May-2008).zip_effective java
在这段代码中,想要计算每个商品所占用的数量,需要将已占用的数量累加起来。但是在你的代码中,使用了 BigDecimal 类型的对象 occupiedNum 来进行累加,但是在累加过程中却一直没有改变它的值,导致最终结果为0。
这是因为 BigDecimal 类型的对象是不可变的,也就是说,一旦创建了一个 BigDecimal 对象,它的值就不会再改变了。因此,在每次累加时,需要将累加后的结果重新赋值给 occupiedNum,才能保证结果正确。
修改后的代码如下:
```java
list.forEach(p -> {
BigDecimal occupiedNum = BigDecimal.ZERO; // 初始化累加变量
for (OccupiedNum o : occupiedNumList) {
System.out.println(p.getProductId() + "=======" + o.getProductId());
System.out.println(p.getProductId().equals(o.getProductId()));
if (p.getProductId().equals(o.getProductId())) {
occupiedNum = occupiedNum.add(o.getNum()); // 累加时重新赋值
}
}
p.setOccupiedQty(occupiedNum);
});
```
在这段代码中,使用了 for 循环来遍历已占用数量列表 occupiedNumList,并使用 occupiedNum.add(o.getNum()) 方法将累加后的结果重新赋值给 occupiedNum,保证了结果的正确性。
阅读全文