高阶函数(1)

52 阅读2分钟

什么是高阶函数?

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

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

map函数

作用:通过对数组的每一个元素应用一个函数来构建一个新数组。

语法: 新数组 = 旧数组.map(旧元素=>新元素)

把数组(1,2,3,4,5) → (2,4,6,8,10)

object I05 {
  /**
   * 高阶函数:一种特殊的函数,它的参数或者返回值为函数类型。
   * 1.map 函数
   *
   */


  def main(args: Array[String]): Unit = {
    val arr1 = Array(1,2,3,4,5,6)
    // Array是一个数组,用来定义一个数组
    // arr1 就是一个数组对象,它有很多的方法,其中就有map。
    // for 循环来输出数组中每个元素

    val fn = (x:Int) => x * 2
    // fn是一个函数,它被传递给map。map是一个高阶函数
    val arr2 = arr1.map(fn)

    // for 循环来输出数组中每个元素
    for(i <- arr2){
      println(i)
    }
  }
}

map 的练习

1.把(1,2,3,4,5) → (1,4,9,16,25)

2.把(-1,2,-3,-4) → (1,2,3,4)

object I06 {
  /**
   * map 的练习
   * 1.把(1,2,3,4,5) → (1,4,9,16,25)
   * 2.把(-1,2,-3,-4) → (1,2,3,4)
   */
  def main(args: Array[String]): Unit = {
    val arr1 = Array(1, 2, 3, 4, 5)
    val arr2 = arr1.map(x => x * x)

    for (i <- arr2) {
      print(s"$i ")
    }

    val arr3 = Array(-1, 2, -3, -4)

    // 绝对值
    val arr4 = arr3.map(x => if(x < 0) -x else x)

    println()
    for (i <- arr4) {
      print(s"$i ")
    }
  }
}

foreach函数

作用:对数组的每一个元素应用函数。

语法:数组.foreach(元素=>{})

打印数组中的元素

object I07 {
  /**
   * foreach
   * 是数组的每一个元素都执行一次 函数
   * */
  def main(args: Array[String]): Unit = {
    val arr1 = Array(1,2,3,4,5)
    
    // arr1.foreach( x => print(x) )
    
    arr1.foreach(print)
    
    arr1.foreach(println)
    
//   for (i <- arr1){
//     print(s"$i ")
//   }
  }
}

filter函数

作用:用于根据指定的条件过滤集合中的元素,保留满足条件的元素并返回一个新的集合。

语法:集合.filter(元素 => 条件判断)

练习:

1.把偶数过滤留下来。(1,2,3,4,5) → (2,4)

2.把小于80分的值去掉,只保留大于80分的分数

object J01 {
  /**
   * filter
   *    过滤器
   *    filter(函数)
   *    如果函数的返回值为true,则元素被保留下来
   **/
  def main(args: Array[String]): Unit = {
    // 把偶数过滤留下来
    val arr1 = Array(1,2,3,4,5,6)
//    val arr2 = arr1.filter(x=> {
//    // println(x)
//      x%2 ==0
//    })
    val arr2 = arr1.filter(x => x%2==0)
    arr2.foreach(println)

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