Scala中的并行集合

调用集合的 par 方法, 会将集合转换成并行化集合.

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

scala> list.par
res1: scala.collection.parallel.immutable.ParSeq[Int] = ParVector(1, 2, 3, 4, 5)

scala> list.par.fold
fold   foldLeft   foldRight

scala> list.par.fold
   def fold[U >: Int](z: U)(op: (U, U) => U): U

scala> list.par.fold(0)(_ + _)
res2: Int = 15

//结果不一样,因为是并行的集合

scala> list.par.fold(100)(_ + _)
res3: Int = 515

scala> list.par.fold(100)(_ + _)
res4: Int = 515

scala> list.par.fold(100)(_ + _)
res5: Int = 415

scala> list.par.fold(100)(_ + _)
res6: Int = 515

 

//结果一样,有方向

scala> list.par.foldLeft(100)(_ + _)
res8: Int = 115

scala> list.par.foldLeft(100)(_ + _)
res9: Int = 115

scala> list.par.foldLeft(100)(_ + _)
res10: Int = 115

scala> list.par.foldLeft(100)(_ + _)
res11: Int = 115

 

//先把集合拆分成并行化集合,在计算

scala> list.par.aggregate
   def aggregate[S](z: => S)(seqop: (S, Int) => S,combop: (S, S) => S): S

scala> list.par.aggregate(0)(_ + _, _ + _)
res12: Int = 15

scala> list.par.aggregate(0)(_ + _, _ + _)
res13: Int = 15

scala> list.par.aggregate(0)(_ + _, _ + _)
res14: Int = 15

scala> list.par.aggregate(0)(_ + _, _ + _)
res15: Int = 15

scala> list.par.aggregate(100)(_ + _, _ + _)
res16: Int = 515

scala> list.par.aggregate(100)(_ + _, _ + _)
res17: Int = 515

scala> list.par.aggregate(100)(_ + _, _ + _)
res18: Int = 515

scala> list.par.aggregate(100)(_ + _, _ + _)
res19: Int = 415

scala> list.par.aggregate(100)(_ + _, _ + _)
res20: Int = 515

 

//创建一个 List

val lst0 = List(1,7,9,8,0,3,5,4,6,2)

//折叠:有初始值(无特定顺序)

val lst11 = lst0.par.fold(100)((x, y) => x + y)

//折叠:有初始值(有特定顺序)

val lst12 = lst0.foldLeft(100)((x, y) => x + y)

//聚合

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

val result = arr.aggregate(0)(_+_.sum, _+_)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值