DevCN
菜单
全部文章快讯开发深度热点

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 类型让空列表保留后续计算所需的元素类型信息。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。