侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

使用高阶函数处理整数列表

2025-12-12 / 0 评论 / 4 阅读

题目

使用高阶函数处理整数列表

信息

  • 类型:问答
  • 难度:⭐

考点

高阶函数,不可变性,集合操作

快速回答

使用 Scala 高阶函数处理整数列表的步骤如下:

  1. 使用 filter 筛选出偶数
  2. 使用 map 对每个元素计算平方
  3. 返回新的不可变列表

示例代码:
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]()
numbers.foreach { n =>
if(n%2==0) res :+= n*n
}
错误地使用可变变量,违背不可变原则
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]