四. filter函数
介绍
filter 是一个高阶函数(higher-order function),用于对集合(如列表、数组、集合等可迭代对象)中的元素进行筛选,返回一个包含原集合中所有满足指定条件元素的新集合。它的核心作用是 “筛选” 集合中的元素,仅保留符合条件的元素并组成新集合。
关键特性
- 返回新集合:
filter的返回类型是与原集合类型一致的集合(如原集合是List,返回值也是List),因此它用于对集合进行元素筛选转换,与仅执行副作用的foreach不同。 - 遍历并筛选元素:
filter会遍历集合中的每一个元素,通过谓词函数判断元素是否满足条件,满足条件的元素会被保留到新集合中。 - 适用于所有可迭代类型:Scala 中所有实现了
Iterable特质的集合(如List、Array、Set、Map、Range等)都支持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)
}
}
结果
练习
把小于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)
}
}
结果
五. 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。不需要写()