我有类似的代码行
batchPrice1 = items.stream()
.map(CommodityItem::getTotalPrice1)
.reduce(ZERO, BigDecimal::add);
batchPrice2 = items.stream()
.map(CommodityItem::getTotalPrice2)
.reduce(ZERO, BigDecimal::add);
batchPrice3 = items.stream()
.map(CommodityItem::getTotalPrice3)
.reduce(ZERO, BigDecimal::add);
我能让它更紧凑,更少重复吗?
我想要一个单独的流来完成这项工作
我建议将其提取到如下方法:
batchPrice1 = sum(CommodityItem::getTotalPrice1);
batchPrice2 = sum(CommodityItem::getTotalPrice2);
batchPrice3 = sum(CommodityItem::getTotalPrice3);
private BigDecimal sum(Function<CommidityItem, BigDecimal> mapper){
return items.stream()
.map(mapper)
.reduce(ZERO, BigDecimal::add);
}
或者如果你只想要一次迭代,它可以通过
实现YouNameIt accumulator = new YouNameIt();
items.forEach(item-> accumulator.accumulate(item));
class YouNameIt{
BigDecimal batchPrice1;//getters
BigDecimal batchPrice2;
BigDecimal batchPrice3;
void accumulate(CommodityItem item){
batchPrice1 += item.getTotalPrice1();
batchPrice2+= item.getTotalPrice2();
batchPrice3+= item.getTotalPrice2();
}
}