高阶函数

33 阅读2分钟

一、什么是高阶函数

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

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

二、map函数

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

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

    def main(args: Array[String]): Unit = {
        // 定义一个元组
        val arr =Array(1,2,3,4)
        // 提问:把arr中每个元素都变成自己的2倍,并返回一个新数组?
        val fn =(x:Int) => x*2
        // Array表示数组,map就是它的方法
        // map就是一个高阶函数,它的参数是一个函数!
        val arr1=arr.map(fn)
        for (i<- arr1){
          println(i)
        }
      }

    }

屏幕截图 2025-10-22 151031.png

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

    def main(args: Array[String]): Unit = {
        // 定义一个元组
        val arr =Array(1,2,3,4,5)
        // 提问:把arr中每个元素都变成自己的2倍,并返回一个新数组?
        //val fn =(x:Int) => x*2
        // Array表示数组,map就是它的方法
        // map就是一个高阶函数,它的参数是一个函数!
        val arr1=arr.map(x=>x*x)
        for (i<- arr1){
          println(i)
        }
      }

    }

屏幕截图 2025-10-22 150826.png

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

    def main(args: Array[String]): Unit = {
        // 定义一个元组
        val arr =Array(-1,2,-3,-4)
        // 提问:把arr中每个元素都变成自己的2倍,并返回一个新数组?
        //val fn =(x:Int) => x*2
        // Array表示数组,map就是它的方法
        // map就是一个高阶函数,它的参数是一个函数!
        val arr1=arr.map(x=> if (x>=0) x else -x)
        for (i<- arr1){
          println(i)
        }
      }

    }

屏幕截图 2025-10-22 150745.png

三、foreach函数

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

打印数组中的元素

    def main(args: Array[String]): Unit = {
      // 定义一个数组
      val arr=Array(-1,2,-3,-4,5)
      // 依次打印每个元素
      arr.foreach(println)
    }

屏幕截图 2025-10-22 153718.png

四、filter函数

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

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

    def main(args: Array[String]): Unit = {
      // 定义一个数组
      val arr=Array(1,2,3,4,5)
      // 只保留arr中的偶数,并存放在一个新的数组中
      // filter的参数是一个函数
      // 如果这个函数返回true,则当前的元素会保留下来
      var arr1=arr.filter(x => x%2==0)

      arr1.foreach(println)
    }

屏幕截图 2025-10-22 153643.png

去掉不及格的分数:(60,59,80,70) → (60,80,70)

    def main(args: Array[String]): Unit = {
      // 定义一个数组
      val arr=Array(60,59,80,70)
      // 只保留arr中的偶数,并存放在一个新的数组中
      // filter的参数是一个函数
      // 如果这个函数返回true,则当前的元素会保留下来
      var arr1=arr.filter(x => x>=60)

      arr1.foreach(println)
    }

屏幕截图 2025-10-22 153604.png