题目
使用高阶函数处理整数列表
信息
- 类型:问答
- 难度:⭐
考点
高阶函数,不可变性,集合操作
快速回答
使用 Scala 高阶函数处理整数列表的步骤如下:
- 使用
filter筛选出偶数 - 使用
map对每个元素计算平方 - 返回新的不可变列表
示例代码:val result = numbers.filter(_ % 2 == 0).map(x => x * x)
解析
问题描述
给定一个整数列表 val numbers = List(1, 2, 3, 4, 5, 6),要求:
1. 过滤出所有偶数
2. 对过滤后的每个元素计算平方
3. 返回新列表
原理说明
Scala 函数式编程核心思想:
- 高阶函数:接收函数作为参数的函数(如
filter,map) - 不可变性:原始集合不被修改,每次操作生成新集合
- 链式调用:通过组合高阶函数实现复杂操作
代码示例
// 输入列表
val numbers = List(1, 2, 3, 4, 5, 6)
// 解决方案
val result = numbers
.filter(n => n % 2 == 0) // 过滤偶数
.map(n => n * n) // 计算平方
// 输出: List(4, 16, 36)最佳实践
- 使用占位符语法简化代码:
numbers.filter(_ % 2 == 0).map(x => x * x) - 优先选择不可变集合(如
List,Vector) - 保持函数纯净:避免在
filter/map内修改外部状态
常见错误
| 错误示例 | 问题分析 |
|---|---|
numbers.foreach(n => if(n%2==0) ...) | 误用循环(命令式风格),应使用高阶函数 |
var res = List[Int]() | 错误地使用可变变量,违背不可变原则 |
filter(n => n % 2) | 忘记返回布尔值(正确应为 n%2==0) |
扩展知识
- 函数组合:可用
collect合并操作numbers.collect { case n if n%2==0 => n*n } - 惰性求值:使用
view优化性能numbers.view.filter(_%2==0).map(x=>x*x).toList - 类型签名理解:
filter类型:def filter(p: (A) => Boolean): List[A]map类型:def map[B](f: (A) => B): List[B]