Scala 集合入门:用不可变 List 筛选与映射记录
以不可变 List 过滤负分钟数,再映射新结果并求和,观察原集合未改变,学习清晰的表达式数据处理方式。
本节目标
以不可变 List 过滤负分钟数,再映射新结果并求和,观察原集合未改变,学习清晰的表达式数据处理方式。
环境与运行方法
本组使用 Scala 2.13 与 JDK 21。保存为 Lesson.scala,执行 scalac Lesson.scala 后运行 scala Lesson。不需要 sbt 或第三方库。
核心思路
常用 List 为不可变集合,filter 与 map 返回新结果,不在原列表里删除或修改元素。val 限制名称重绑定,结合不可变集合可减少共享状态的复杂度。
完整示例
object Lesson {
def main(args: Array[String]): Unit = {
val records = List(20, -5, 35, 0)
val valid = records.filter(_ >= 0)
val doubled = valid.map(_ * 2)
println("valid=" + valid.size + " total=" + valid.sum)
println(doubled.mkString(","))
println("original=" + records.size)
}
}预期输出
valid=3 total=55
40,70,0
original=4逐步理解
下划线表示简洁匿名函数参数。filter 保留三个非负项,map 分别乘二,mkString 仅把结果格式化输出。原列表仍有四项,并没有因为筛选而被缩短。
清晰的集合处理可能建立中间结果。大数据可考虑迭代器或视图,但要理解延迟执行及消费规则,不要为了追求一行表达式而使逻辑难以阅读。
常见问题与边界
- val 引用可变对象时,内部仍可能改变。
- List 不适合所有随机访问负载。
- sum 仍受整数类型范围限制。
动手练习
使用 List.empty[Int] 作为输入。
参考答案
所有处理结果为空,sum 为 0,原数量为 0。给出 Int 类型让空列表保留后续计算所需的元素类型信息。
文章回复
0 条公开回复