【Scala】Scala 之聚合函数 aggregate (详解)

val arr = List(List(1, 2, 3), List(3, 4, 5), List(2), List(0))

scala> val arr =List(List(1,2,3),List(3,4,5),List(2),List(0));
arr: List[List[Int]] = List(List(1, 2, 3), List(3, 4, 5), List(2), List(0))

arr.aggregate(0)(+.reduce(+),+)

scala> arr.aggregate(0)(_+_.reduce(_+_),_+_);
res18: Int = 20

第一个_代表累加后的值,就是先做局部运算
第二个.reduce(+_) 代表 每一个 内部List 进行汇总运算

运算步骤:

+.reduce(+)) 先计算 list1 1+2+3 6

+.reduce(+)) 再计算list2 3+4+5 12

+.reduce(+)) list3计算 2

+.reduce(+)) list4计算 0

以上局部变量就计算完了
当list1计算出来的时候就放到 + 初始值为0 + 6
然后当list2计算出来的时候 + 值 为 2+12
后面依次相加 …

下面这两种写法都可以

arr.aggregate(10)(+.sum,+)

arr.par.aggregate(10)(+.sum,+)
.par ---- 变成并行式的集合进行分区,分片多核计算

scala> arr.par.aggregate(10)(_+_.sum,_+_);
res19: Int = 60
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值