Scala函数进阶(2)

44 阅读2分钟

filter函数

作用:

💫对数组元素使用函数进行过滤。

语法:

🙋‍♀️新数组= 旧数组.filter(元素=>bool) 它的参数是一个函数,这函数的返回值是布尔值。如果返回为true就保留。

🎊案例1:在数组中找出元素是偶数的,并组成新数组。(1,2,3,4,5) → (2,4)

👑👑👑👑

val arr1 = Array(1,2,3,4,5,6)
val arr2 = arr1.filter(x=> x%2  == 0)
arr2.foreach(println)

🎊案例2:把小于80分的值去掉,只保留大于80分的分数

✨✨✨✨

     var score=Array(90,98,60,49,100)
     var arr3=score.filter(x=> x>80)
     arr3.foreach(println)

reduce函数

作用:

🙋‍♀️reduce 是一种集合操作,用于对集合中的元素进行聚合操作,返回一个单一的结果。它通过指定的二元操作(即取两个元素进行操作)对集合中的所有元素进行递归处理,并最终将其合并为一个值。

语法:

🙋‍♀️reduce 函数需要一个函数作为参数,这个函数接受两个相同类型的参数,并返回一个值。

Snipaste_2025-10-27_15-06-46.png

🎊案例1:求数组的累加

🎀🎀🎀🎀

object day14 {
  def main(args: Array[String]): Unit = {
    val arr =Array(1,2,3,4,5)
    //求数组的累加
    val rst=arr.reduce((x,y)=>x+y)
    //val rst=arr.sum
    println(s"rst=${rst}")
  }
}

reduceLeft,reduceRight

介绍:

🙋‍♀️reduceLeft是从集合的左侧开始聚合,与reduce等价; reduceRight是从集合的右边开始。

object day15 {
  // reduce=======reduceLeft   从左向右计算
  //              reduceRight  从右向左计算
  def main(args: Array[String]): Unit = {
    val arr =Array(1,2,3)
    val rst=arr.reduceLeft((x,y)=>x-y)

    val rst1=Array(1,2,3,4).reduceRight((x,y)=>x-y)
    println(s"rst=${rst}")//-4
    println(s"rst=${rst1}")//-2
  }
}

fold函数

介绍:

🙋‍♀️fold 是一种集合操作(与reduce类似),用于对集合中的元素进行聚合操作,返回一个单一的结果,需要提供一个初始的“种子”值。

语法:

数组.fold(初值)(函数)

案例:

object day16 {
  //flod:带初值的reduce
  def main(args: Array[String]): Unit = {
     val rst=Array(1,2,3).fold(10)((x,y) ==>x+y)
    println(s"rst=${rst}")
  }
}

sorted函数

功能:

🙋‍♀️对元素进行排序。它会直接使用元素自身的自然顺序进行排序

语法:

新数组 = 原数组.sorted

案例:

object day17 {
  //sorted:带初值的reduce
  def main(args: Array[String]): Unit = {
    //对数值元素排序
    var arr=Array(-1,10,-2,1,2,3).sorted
    arr.foreach(println)

    //对字符元素排序,字典排序
    var arr2=Array("zoom","bus","apple","banana","car").sorted
    arr2.foreach(println)
  }
}

sortedWith

功能:

🙋‍♀️按自定义规则排序

语法:

新数组 = 原数组.sortedWith(排序函数)

排序函数:

🙋‍♀️(元素a,元素b)=>Bool。如果返回 true,则 表示元素a应排在元素b之前。

object day18 {
  //sortWith: 自定义排序
  // sortWith ((x,y) => 布尔值 )
  // (1)如果返回值是 true,那么 x 就在 y 的前面
  // (1)如果返回值是 false,那么 x 就在 y 的后面
  def main(args: Array[String]): Unit = {
    //对数值排序:按照离1这个点的距离的从大到小排序
    var arr = Array(-1, 10, -2, 1, 2, 3).sortWith((x, y) => Math.abs(x - 1) < Math.abs(y - 1))
    arr.foreach(println)
  }
}

Snipaste_2025-10-27_15-58-21.png