Scala高阶函数(1)

59 阅读2分钟

R-C.gif

filter函数

🧡作用:对数组元素使用函数进行过滤。

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

00315A75.png 例一:把数值为偶数的留下来 (1,2,3,4,5)。

代码如下:

 def main(args: Array[String]): Unit = {
//把数值为偶数的留下来
   val arr1 = Array(1,2,3,4,5)
//    val arr2 = arr1.filter( x=>{
//        println(x)
//        x % 2 == 0
//    })
   val arr2 =arr1.filter(x => x%2==0)
   arr2.foreach(println)

00315A75.png 例二: 把小于80分的值去掉 只保留大于80分的分数(90,98,60,49,100)。

代码如下:

    var score = Array(90,98,60,49,100)
//    把小于80分的值去掉 只保留大于80分的分数
    val score1 =score.filter(x=> x>80).foreach(println)

reduce函数

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

🍟🍟语法:reduce 函数需要一个函数作为参数,这个函数接受两个相同类型的参数,并返回一个值。

00315A75.png 例一:求数组元素的累加。

代码如下:

  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}")
}
//运行结果为:
//rst = 15

注意:

reduceLeft 从左往右计算

reduceRight 从右往左计算

如:

  def main(args: Array[String]): Unit = {
//redude === reduceLeft 从左往右计算
//           reduceRight 从右往左计算
    val arr = Array(1,2,3,4)

    val rst = arr.reduceLeft( (x,y) => x - y)
    val rst1 = arr.reduceRight((x,y)=> x - y)
//    val rst = arr.sum
    println(s"rst = ${rst}")
    println(s"rst1 = ${rst1}")

  }
// 运行结果为:
//  rst = -8
//  rst1 = -2

fold函数

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

🌸🌸语法:数组.fold(初值)(函数)

如:

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

sorted函数

🩷🩷功能:对元素进行排序。它会直接使用元素自身的自然顺序进行排序

🧡🧡语法:新数组 = 原数组.sorted

如:

  def main(args: Array[String]): Unit = {
//    对数值元素排序 从小到大排序
  val arr = Array(-1,10,3,2,1).sorted
    arr.foreach(println)

//    对字符元素排序 字典顺序
  var arr2 = Array("zoom","bus","apple","banana","car").sorted
    arr2.foreach(println)
    }
    
// 运行结果为:
-1
1
2
3
10
apple
banana
bus
car
zoom

sortedWith函数

💕💕功能:按自定义规则排序

🎀🎀语法:新数组 = 原数组.sortedWith(排序函数)

00315A75.png 例一:对数值元素排序 按照1这个点的距离的从小到大排序(-1,10,-2,1,2,3)

代码如下:

//sortWith:自定义排序
//sorWith((x,y) => 布尔值)
//  1.如果返回值是true 那么x就在y的前面
//  2.如果返回值是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)
  }
  
  // 运行结果为:
  1
  2
 -1
  3
 -2
 10