scala 高阶函数(二)

38 阅读1分钟

reduce函数

1. 作用:

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

2. 语法:

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

3.例题:

object basic45 {

  def main(args: Array[String]): Unit = {
// 定义一个数组
   val arr=Array(1,2,3,4,5)
  val rst=arr.reduce((x,y)=>y+x)
println(s"rst=${rst}")

  }
}

4. reduce 求最值

object basic45 {
  def main(args: Array[String]): Unit = {
// 定义一个数组
   val arr=Array(-1,2,30,5)
    // 求最大值
  val rst=arr.reduce((x,y)=>if(x>y)x else y)
    // 求最小值
    val rst1=arr.reduce((x,y)=>if(x<y)x else y)
println(s"rst=${rst}")// 15
    println(s"rst=${rst1}")

  }
}

reduceLeft-reduceRight

1. reduce具有方向性

案例(一):

object basic46 {

  def main(args: Array[String]): Unit = {
// 定义一个数组
   val arr=Array(1,2,3,4)
    // reduce === reduceLeft
    val rst =arr.reduceLeft((x,y)=> x - y)
  val rst1=arr.reduceRight((x,y)=>x - y)

println(s"rst=${rst}")// -8
    println(s"rst1=${rst1}")// -2

  }
}

fold

1.作用

fold :与reduce类似,都是做聚合操作。但是,它有一个初始值

基本案例:

object basic47 {
  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

1. sorted排序

功能:按自定义规则排序

object basic48 {
  def main(args: Array[String]): Unit = {
// 定义一个数组
//   val arr=Array(-1,20,3,40)
//    // 10就是初始值
//    var arr1=arr.sorted
//    arr1.foreach(println)

// 对数值进行排序:从小到大排序
    Array(-1,20,-100,3,40).sorted.foreach(println)

    // 对字符排序:按照字典顺序
    Array("zip","bus","apple","banana","card").sorted.foreach(println)
  }
}

sortWith

1.sortWith 自定义排序规则

2. 对数值进行排序:按照0点的距离大小进行排序

object basic49 {
// sortWith  自定义排序规则
  def main(args: Array[String]): Unit = {
    Array(-1,2,0,4,9).sortWith((x, y) => Math.abs(x - 0) < Math.abs(y- 0)).foreach(println)

//    sortWith((x,y)=> 布尔值)
//    true: x 应该要排在y的前面
//    false: x要排在y的后面
  }
}

3.任务:从大到小排序?

object basic50 {
// sortWith  自定义排序规则
  def main(args: Array[String]): Unit = {
//    Array(-1,2,0,4,9).sortWith((x, y) => Math.abs(x - 0) < Math.abs(y- 0)).foreach(println)

    // 任务:从大到小排序?
    Array(-1,2,0,4,9).sortWith((x, y) => x>y ).foreach(println)

  }
}