前面我们学习了一部分高阶函数,内部包括 map, foreach,filter,flatten
reduce函数
作用:reduce 是一种集合操作,用于对集合中的元素进行聚合操作,返回一个单一的结果。 它通过指定的二元操作(即取两个元素进行操作)对集合中的所有元素进行递归处理,并最终将其合并为一个值。
语法:reduce 函数需要一个函数作为参数,这个函数接受两个相同类型的参数,并返回一个值。
def main(args: Array[String]): Unit = {
//定义一个数组
val arr = Array(1,2,3,4,5)
val rst = arr.reduce( (x,y) => x + y )
println(s"rst = ${rst}") //15
}
案例: 求 -1,2,30,5 四个数的最大值和最小值
def main(args: Array[String]): Unit = {
//定义一个数组
val arr = Array(-1,2,30,5)
// 求最大值
val rst_max = arr.reduce( (x,y) => if(x > y) x else y)
// 求最小值
val rst_min = arr.reduce( (x,y) => if(x < y) x else y)
println(s"rst_max = ${rst_max}") //30
println(s"rst_min = ${rst_min}") //-1
}
reduceLeft-reduceRight
reduceLeft是从集合的左侧开始聚合,与reduce等价; reduceRight是从集合的右边开始。
def main(args: Array[String]): Unit = {
//定义一个数组
val arr = Array(1,2,3)
// reduce ==== reduceLeft
val rst1 = arr.reduceLeft( (x,y) => x + y ) // 6 (1+2+3)
val rst2 = arr.reduceLeft( (x,y) => x - y ) // -4 (1-2-3)
val rst3 = arr.reduceRight( (x,y) => x - y ) // 2 (2-3=-1 1-(-1)=2)
println(s"rst1 = ${rst1}")
println(s"rst2 = ${rst2}")
println(s"rst3 = ${rst3}")
fold
与reduce类似 都是做聚合操作 但是 它有一个初始值
作用:fold 是一种集合操作(与reduce类似),用于对集合中的元素进行聚合操作,返回一个单一的结果,需要提供一个初始的“种子”值。
语法:数组.fold(初值)(函数)
def main(args: Array[String]): Unit = {
//定义一个数组
val arr = Array(1,2,3,4)
// 10 就是初始值
val rst = arr.fold(10)( (x,y) => x+y )
println(s"rst=${rst}") //20
}
sorted函数
功能:对元素进行排序。它会直接使用元素自身的自然顺序进行排序
语法:新数组 = 原数组.sorted
案例:对数值排序,对字符排序
def main(args: Array[String]): Unit = {
//定义一个数组
// val arr = Array(-1,20,3,40)
// var arr1 = arr.sorted
// arr1.foreach(println)
// 对数值进行排序 从小到大
Array(-1,20,9,13,70).sorted.foreach(println) // -1 9 13 20 70
// 对字符排序 按照字典排序
// 字典序排序规则:先看大小写字母:大写字母 < 小写字母
// 同大小写按字母表顺序
Array("PURPLE","GREEN","bus","Pink").sorted.foreach(println) // GREEN PURPLE Pink bus
}
sortWith 函数
功能:按自定义规则排序
语法:新数组 = 原数组.sortedWith(排序函数)
排序函数: (元素a,元素b)=>Bool。如果返回 true,则 表示元素a应排在元素b之前。
def main(args: Array[String]): Unit = {
//定义一个数组
// 对数值进行排序 按高0点的距离大小进行排序
// sortWith( (x,y) => 布尔值)
// true: x 应该要排在y的前面
// false: x 要排在 y 的后面
// 从小到大排序
Array(-1,2,0,9,4).sortWith((x,y) => Math.abs(x-0) < Math.abs(y-0) ).foreach(println) // 0 -1 2 4 9
// 从大到小排序
Array(-1,2,0,9,4).sortWith((x,y) => x > y).foreach(println) // 9 4 2 0 -1
}