scala简单计算方法

2018/12/04 10:28
阅读数 39

2018-12-03 09:33:16 

//并行计算求和
val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

// 单线程聚合
val res = arr.sum
val res = arr.reduce((x,y) => x + y)
val res = arr.reduce(_+_)

//并行聚合(par)线程数不受控制,主要看系统有多少的空闲线程
val res = arr.par.sum    //((1+2)+3)+4
val res = arr.par.reduce(_+_)

//按照特定的顺序
//按照特定的顺序进行累加,此时par方法是无效,也就是单线程执行的
val res = arr.par.reduceLeft(_-_) // ((1-2)-3)-4 ...
val res = arr.reduceRight(_-_) // 1-(2-(3-(4-5)))


//折叠:有初始值(无特定顺序)
val res = arr.fold(10)(_+_)
val res = arr.par.fold(10)(_+_)

//折叠:有初始值(有特定顺序)
// foldLeft和reduceLeft方法一样,都属于单线程执行
val res = arr.foldLeft(10)(_+_)
val res = arr.par.foldLeft(10)(_+_)
val res = arr.par.foldRight(10)(_+_)

//聚合(flatten压平,aggregate聚合)
val arr1 = List(List(1, 2, 3), List(3, 4, 5), List(2), List(0))
val res = arr1.flatten.reduce(_+_)
val res = arr1.aggregate(10)((x,y) => x + y.sum, (a,b) => a + b)
val res = arr1.aggregate(10)(_+_.reduce(_+_), _+_)
val res = arr1.par.aggregate(0)(_ + _.reduce(_ + _), _ + _)

// 需求:统计一个聚合结果,结果为一个元组,元组里有两个结果值
// 第一个值是arr数组里所有元素的总和,第二个值是在聚合过程中有多少个数参与计算
// 结果是: (55, 10)
val res = arr.aggregate((0, 0))(
(acc, num) => (acc._1 + num, acc._2 + 1),
(par1, par2) => (par1._1 + par2._1, par1._2 + par2._2)
)

val l1 = List(5, 6, 4, 7)
val l2 = List(1, 2, 3, 4)

//求并集
val res = l1 union l2
val res = l1 ++ l2

//求交集
val res = l1 intersect l2

//求差集
val res = l2 diff l1

  

  

展开阅读全文
par
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部