1. 高阶函数的定义
在 Scala 中,高阶函数是指接收函数作为参数或返回函数作为结果的函数。Scala 对函数式编程支持原生,函数可以像变量一样传递,因此高阶函数应用广泛。
示例:
// 接收函数作为参数
def applyFunc(f: Int => Int, x: Int): Int = f(x)
// 定义一个函数作为参数
val double = (x: Int) => x * 2
// 调用高阶函数
println(applyFunc(double, 5)) // 输出:10
2. map函数的使用方法
map 是 Scala 集合(如 List、Array 等)的高阶函数,用于对集合中的每个元素应用指定函数,返回一个包含所有结果的新集合(原集合不变)。
语法:
集合.map(函数) // 函数接收集合元素类型,返回新类型
示例:
val nums = List(1, 2, 3, 4)
// 对每个元素乘以 2(使用匿名函数)
val doubled = nums.map(x => x * 2)
println(doubled) // 输出:List(2, 4, 6, 8)
// 简化写法(参数唯一时可用 _ 代替)
val squared = nums.map(_ * _) // 等价于 x => x * x
println(squared) // 输出:List(1, 4, 9, 16)
// 转换元素类型(Int -> String)
val strs = nums.map(_.toString + "元")
println(strs) // 输出:List(1元, 2元, 3元, 4元)
3. foreach函数的使用方法
foreach 用于遍历集合中的每个元素并执行指定操作(无返回值,仅用于副作用,如打印、修改外部变量等)。
语法:
集合.foreach(函数) // 函数接收元素,无返回值(Unit 类型)
示例:
val fruits = List("apple", "banana", "orange")
// 打印每个元素
fruits.foreach(println) // 依次输出:apple、banana、orange
// 累计元素长度(副作用操作)
var totalLength = 0
fruits.foreach(s => totalLength += s.length)
println(totalLength) // 输出:16(5 + 6 + 5)
4. filter函数的使用方法
filter 用于根据函数的布尔返回值筛选集合元素,保留使函数返回 true 的元素,返回新集合。
语法:
集合.filter(函数) // 函数接收元素,返回 Boolean
示例:
val nums = List(1, 2, 3, 4, 5, 6)
// 筛选偶数
val evens = nums.filter(x => x % 2 == 0)
println(evens) // 输出:List(2, 4, 6)
// 筛选长度大于 5 的字符串
val words = List("cat", "elephant", "dog", "giraffe")
val longWords = words.filter(_.length > 5)
println(longWords) // 输出:List(elephant, giraffe)
5. flatten函数的使用方法
flatten 用于将嵌套的集合展开为一维集合(仅适用于元素本身也是集合的情况,如 List[List[T]] 展开为 List[T])。
语法:
嵌套集合.flatten // 要求集合元素必须是可迭代的(如 List、Array 等)
示例:
// 二维列表展开为一维
val nestedList = List(List(1, 2), List(3, 4), List(5))
val flatList = nestedList.flatten
println(flatList) // 输出:List(1, 2, 3, 4, 5)
// 嵌套数组展开
val nestedArr = Array(Array("a", "b"), Array("c"))
val flatArr = nestedArr.flatten
println(flatArr.mkString(", ")) // 输出:a, b, c
// 注意:元素非集合时无法 flatten(编译报错)
// val invalid = List(1, List(2, 3)).flatten // 错误:Int 不是集合类型
补充:链式调用
Scala 集合的高阶函数支持链式调用,可读性强:
val result = List(1, 2, 3, 4, 5)
.filter(_ % 2 == 1) // 筛选奇数:List(1, 3, 5)
.map(_ * 10) // 乘以 10:List(10, 30, 50)
.foreach(println) // 打印每个元素
以上函数均为 Scala 集合的核心操作,体现了函数式编程 “无副作用”“链式转换” 的特点。