使多个Java流赋值更紧凑



我有类似的代码行

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();
}
}

最新更新