Scala:高阶函数(1)后续💕

83 阅读3分钟

四. filter函数

介绍

filter 是一个高阶函数(higher-order function),用于对集合(如列表、数组、集合等可迭代对象)中的元素进行筛选,返回一个包含原集合中所有满足指定条件元素的新集合。它的核心作用是 “筛选” 集合中的元素,仅保留符合条件的元素并组成新集合。

关键特性

  • 返回新集合filter 的返回类型是与原集合类型一致的集合(如原集合是 List,返回值也是 List),因此它用于对集合进行元素筛选转换,与仅执行副作用的 foreach 不同。
  • 遍历并筛选元素filter 会遍历集合中的每一个元素,通过谓词函数判断元素是否满足条件,满足条件的元素会被保留到新集合中。
  • 适用于所有可迭代类型:Scala 中所有实现了 Iterable 特质的集合(如 ListArraySetMapRange 等)都支持 filter 方法。

练习

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

作用

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

语法

新数组= 旧数组.filter(元素=>bool)

注意: 它的参数是一个函数,这函数的返回值是布尔值。如果返回为true就保留。

代码

object base1804 {
  /**
   * filter
   * 过滤器。
   * filter(函数)
   * 如果函数的返回值为true,则元素就保留下来
   */

  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)
  }
}

结果

Snipaste_2025-10-27_15-20-07.png

练习

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

代码

object base1804 {
  def main(args: Array[String]): Unit = {
    var score = Array(90,98,60,49,100)
    score.filter(x => x > 80).foreach(println) // 或
    // val score2 = score1.filter(x => x > 80)
    // score2.foreach(println)
  }
}

结果

0.png

五. flatten函数

介绍

flatten 是一个高阶函数,用于将嵌套的集合 “扁平化” ,即把多层嵌套的集合结构转换为单层集合。它的核心作用是简化集合的嵌套层级,返回一个包含所有底层元素的新集合(原嵌套结构中的元素会被提取并合并到同一层)。

关键特性

  • 返回新的单层集合flatten 的返回类型是与原集合元素类型适配的单层集合,因此它用于对嵌套集合进行结构转换(与仅执行副作用的 foreach 不同)。例如,List(List(1,2), List(3,4)) 经过 flatten 后会变成 List(1,2,3,4)
  • 处理嵌套结构flatten 会遍历并拆解集合的嵌套层级,要求原集合的元素本身也必须是可迭代的集合类型(如 List[List[A]]Array[Array[A]] 等)。如果元素不是可迭代集合,调用 flatten 会报错。
  • 适用于所有嵌套可迭代类型:Scala 中所有元素为可迭代集合的嵌套结构(如 List[List[A]]Array[Vector[A]]Set[Seq[A]] 等)都支持 flatten 方法。

练习

作用

将二维数组中的元素展平至单数组中

语法

二维数组.flatten。不需要写()