Scala高阶函数(2)

63 阅读2分钟

一、高阶函数

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
  }
  1. 大写字母的 Unicode 值小于小写字母,所以所有大写开头的字符串排在小写开头的 "bus" 前面
  2. 大写字母内部按照字母表顺序排序:H 开头的排在 W 开头的前面
  3. 同为 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  
}

屏幕截图 2025-10-27 195134.png