scala-聚合算子
聚合算子
count 对元素计数
-
方法声明
def count(p: A => Boolean): Int = {}
-
方法参数为一个一元函数,一元函数传入一个int整数值,返回一个布尔值,只有布尔为true的元素才会被记录
-
count方法可以有选择的统计需要的变量
-
实例
val list1 = (1 to 10).toList
//普通计数,集合长度
val size = list1.size;
val length = list1.length
val i1 = list1.count(_ % 2 == 0)
print(size+"\t"+length+"\t"+i1)
/*
输出:10 10 5
*/
sum 对元素求和
- 同理还有最大值max,最小值min方法
- 实例
val list1 = (1 to 10).toList
//sum算子
val sum = list1.sum;val max=list1.max;val min=list1.min
println(sum+"\t"+max+"\t"+min)
/*
输出:55 10 1
*/
reduce 聚合算子
-
方法声明
def reduce[A1 >: A](op: (A1, A1) => A1): A1 = reduceLeft(op)
-
[A1 >: A]:reduce的参数A1必须为调用reduce数据集元素类型的子集
-
reduceLeft(op):将匿名函数op传递给reduceLeft,底层调用reduceLeft实现
-
op: (A1, A1) => A1:第一个A1为当前聚合后的变量,第二个A1为当前要聚合的元素。最终返回A1类型的变量
-
reduce最终将原数据集聚合后生成一个元素
-
实例
//reduce 聚合算子 计算数组内两两之差
val list2 = (1 to 3).toList
val i = list2.reduce((x: Int, y: Int) => {
x - y
})
/*
reduce = reduceLeft 从左边开始进行计算
(1-2) 3 => -1 -3 =>-4
*/
var i3 = list2.reduceRight(_ - _)
/*
reduceRight 从右边开始进行计算
1 (2 -3) => 1 - -1 =>2
*/
println(i+"\t"+i3)
fold 折叠算子
-
方法声明
def foldLeft[B](z: B)(@deprecatedName('f) op: (B, A) => B): B ={}
-
给定初始值,将源数据集和初始值一起进行折叠
-
fold中有两个参数列表
-
第一个参数列表用来写集合之外的初始值,代表聚合从给定的初始化值开始
-
第二个参数列表与reduce相同
//fold算子
val list3: List[Int] = (1 to 3).toList
val i4: Int = list3.foldLeft(100)(_ - _)
/*
fold=foldLeft 从左边开始进行计算
(100-1) 2 3 => 99 -2 3 => 97 - 3 => 94
*/
val i5: Int = list3.foldRight(100)(_ - _)
/*
foldRight 从右边开始进行计算
1 2 (100-3) => 1 (2- -97) => 1 -99 => -98
*/
println(i4 + "\t" + i5)