在 Scala 中,高阶函数(Higher-Order Function) 是指满足以下两个条件之一的函数:
- 接收函数作为参数;
- 返回函数作为结果。
Scala 的函数是 “一等公民”(First-Class Citizen),可以像值(Int、String 等)一样被传递、赋值、作为返回值,这是高阶函数的核心基础。
1.map函数
map 是 Scala 中最常用的高阶函数,核心作用是:对集合中的每个元素应用指定函数,将元素转换为新类型 / 新值,最终返回包含所有转换结果的新集合(原集合保持不变,满足函数式 “不可变” 特性)。
任务:把数组(1,2,3,4,5) → (2,4,6,8,10)
val arr1 = Array(1,2,3,4,5,6)
val arr2 = arr1.map(x=>x*2)
for(i <- arr2){
println(i)
}
2.foreach函数
foreach 是 Scala 集合中用于执行副作用(Side Effect) 的核心高阶函数,核心作用是:遍历集合的每个元素,对每个元素执行指定的无返回值函数(A => Unit),不返回任何结果(返回 Unit) 。
它与 map 的核心区别是:map 用于 “转换元素并生成新集合”,foreach 用于 “执行操作(如打印、写入文件、修改外部变量)”,不产生新集合,仅关注 “过程” 而非 “结果”。
任务: 打印数组中的元素
arr2.foreach(println)
3.filter函数
filter 是 Scala 集合中用于筛选元素的核心高阶函数,核心作用是:遍历集合的每个元素,通过传入的 “布尔判断函数”(谓词函数)筛选出满足条件的元素,最终返回包含所有符合条件元素的新集合(原集合保持不变)。
它与 map(转换元素)、foreach(执行副作用)的核心区别是:filter 专注于 “筛选”,仅保留符合逻辑的元素,不改变元素本身的类型和值。
任务:在数组中找出元素是偶数的,并组成新数组。(1,2,3,4,5) → (2,4)
val arr1 = Array(1,2,3,4,5,6)
val arr3 = arr1.filter(x=> x%2 == 0)
arr3.foreach(println)
4.flatten函数
flatten 是 Scala 集合中用于扁平化嵌套结构的核心函数(严格来说,flatten 本身不是高阶函数 —— 它不接收函数参数,也不返回函数;但它常与高阶函数 map/filter 结合使用,是函数式数据处理的重要辅助工具),核心作用是:将 “嵌套集合”(如 List[List[A]]、List[Option[A]] 等)转换为 “单层集合”,消除嵌套层级(原集合保持不变)。
var arr1 = Array(Array(1,2,3), Array(4,5,6))
println(arr1(0)(0))
var arr2 = arr1.flatten