collectors 求和,Java 8 Stream添加元素以列出和求和

I believe I can do next using one stream operation on listOfPricedObjects:

List myList = new ArrayList();

myList = listOfPricedObjects.stream().map(PricedObject::getPrice).collect(Collectors.toList());

BigDecimal sum = listOfPricedObjects.stream().map(PricedObject::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add)

How I can fill myList with prices and calculate sum of prices using stream one time?

Thanks

UPD: As the result I need myList filled with prices and sum variable with sum. But not with usding stream() twice for that.

解决方案

You can use peek and add to a new list while applying the reduction

List newList = new ArrayList<>();

BigDecimal sum = list.stream()

.map(PricedObject::getPrice)

.peek(newList::add)

.reduce(BigDecimal.ZERO, BigDecimal::add);

Please look at Tunaki answer if you interested in using a parallelStream with a non concurrent collection which makes sense since sum as an embarrassingly parallel task.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值