一、高阶函数
1.reduce函数
作用:reduce 是一种集合操作,用于对集合中的元素进行聚合操作,返回一个单一的结果。它通过指定的二元操作(即取两个元素进行操作)对集合中的所有元素进行递归处理,并最终将其合并为一个值。
语法:reduce 函数需要一个函数作为参数,这个函数接受两个相同类型的参数,并返回一个值。
代码:
scala
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 四个数的最大值和最小值
scala
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是从集合的右边开始。
scala
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
作用:fold与reduce类似,都是做聚合操作,但是 它有一个初始值
语法:数组.fold(初值)(函数)
scala
// fold:与reduce类似 都是做聚合操作 但是 它有一个初始值
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
scala
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("ABC","DEFG","hij","gklmnopq").sorted.foreach(println) // HWLX Hamburger WYM bus
}
- 大写字母的 Unicode 值小于小写字母,所以所有大写开头的字符串排在小写开头的 "bus" 前面
- 大写字母内部按照字母表顺序排序:H 开头的排在 W 开头的前面
- 同为 H 开头时,比较第二个字符:"HWLX" 的第二个字符是 W,"Hamburger" 的第二个字符是 a(a 的 Unicode 值大于 W),所以"HWLX" 排在 "Hamburger" 前面
五、sortWith 函数
功能:按自定义规则排序
语法:新数组 = 原数组.sortedWith(排序函数)
排序函数: (元素a,元素b)=>Bool。如果返回 true,则 表示元素a应排在元素b之前。
scala
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
}