高阶函数

182 阅读2分钟

一、高阶函数

一种特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。

Scala的常见高阶函数包括Array.map、flatten、flatmap、foreach、reduce、filter和fold等。

object Base53 {
  def main(args: Array[String]): Unit = {
    val arr = Array(1,2,3,4,5)
    val fn = (x:Int) => x*2
    val arr1 = arr.map(fn)
    for(i<-arr1){
      println(i)
    }
  }
}
object Base53 {

  def main(args: Array[String]): Unit = {
//    val arr = Array(1,2,3,4,5) fn是一个字面量函数
//    val fn = (x:Int) => x*2 map是一个高阶函数,因为它的参数类型是函数!
//  没有必要去单独定义一个函数fn,这里直接写在map函数中,此时它就是一个匿名函数
    val arr = Array(1,2,3,4,5)
    val arr1 = arr.map(x=>x*2)
    for(i <- arr1){
      println(i)
    }
  }
}
object Base54 {
  def main(args: Array[String]): Unit = {
//    val arr = Array(1,2,3,4,5)
//    val fn = (x:Int) => x*2
    val arr = Array(-1,2,-3,-4,5)
    val arr1 = arr.map(x => x * x)
    for(i <- arr1){
      println(i)
    }
  }
}
object Base55 {
  def main(args: Array[String]): Unit = {
//    val arr = Array(1,2,3,4,5)
//    val fn = (x:Int) => x*2
    val arr = Array(-1,2,-3,-4,5)
    val arr1 = arr.map(x => if(x>0) x else -x)
    for(i <- arr1){
      println(i)
    }
  }
}

foreach:依次使用当前函数来处理数组中的每一个元素

object Base56 {
  def main(args: Array[String]): Unit = {
      val arr = Array(-1,2,-3,-4,5)
      arr.foreach(println)
    }
}

filter(函数fn),如果fn的返回值是true,就保留这个元素

object Base56 {
  def main(args: Array[String]): Unit = {
      val arr = Array(1,2,3,4,5)
      val arr1 = arr.filter(x=>x%2==0)
      arr.foreach(println)
    }
}

reduce:聚合

object Base57 {
  def main(args: Array[String]): Unit = {
    var arr = Array(1,2,3,4,5)
    var sum = arr.reduce((x,y)=>x+y)
    println(sum)
    }
}
object Base58 {
  def main (args: Array [String]): Unit = {
    var arr = Array (-1,20,3,2,50)
    // 排序
    var arr1 = arr.sorted// 对于数组类型的数据,从小到大升序排列
    var arr2 = Array ("banana", "zip", "b", "a", "apple")
    // 排序
    var arr3 = arr2.sorted// 对于字符类型的数据,按照字母表的顺序排
    arr3.foreach(println)}
}