Scala中的.map函数

在Scala中,.map 是一个非常重要的高阶函数,用于对集合中的每个元素应用一个函数,并返回一个新的集合,其中包含应用函数后的结果。.map 是函数式编程中的一个核心概念,它体现了“对集合中的每个元素进行某种转换”的思想。

核心概念

  • 输入:一个集合(如 ListSeqArray 等)和一个函数。

  • 操作:对集合中的每个元素应用这个函数。

  • 输出:一个新的集合,包含对每个元素应用函数后的结果。

语法

.map 的语法如下:

scala复制

collection.map(function)
  • collection 是原始集合。

  • function 是一个函数,接收集合中的每个元素作为输入,并返回一个结果。

示例 1:对一维列表应用 .map

假设我们有一个整数列表,想要将每个元素乘以2:

scala复制

val numbers = List(1, 2, 3, 4, 5)
val doubled = numbers.map(_ * 2)  // 使用匿名函数
println(doubled)  // 输出:List(2, 4, 6, 8, 10)
  • numbers.map(_ * 2) 的含义是:对 numbers 中的每个元素 x,应用函数 x * 2

  • _ 是Scala中的占位符,表示当前元素。

示例 2:对字符串列表应用 .map

假设我们有一个字符串列表,想要将每个字符串转换为大写:

scala复制

val words = List("apple", "banana", "cherry")
val uppercased = words.map(_.toUpperCase)
println(uppercased)  // 输出:List(APPLE, BANANA, CHERRY)
  • _.toUpperCase 是一个匿名函数,表示对每个字符串调用 toUpperCase 方法。

示例 3:对二维列表应用 .map

如果有一个二维列表,我们可以对每一行应用 .map

scala复制

val matrix = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
val incrementedMatrix = matrix.map(row => row.map(_ + 1))
println(incrementedMatrix)
// 输出:List(List(2, 3, 4), List(5, 6, 7), List(8, 9, 10))
  • 外层的 .map 遍历每一行。

  • 内层的 .map 遍历每一行中的每个元素,并将其加1。

示例 4:提取对象的属性

假设我们有一个包含对象的列表,想要提取某个属性:

scala复制

case class Person(name: String, age: Int)

val people = List(Person("Alice", 25), Person("Bob", 30), Person("Charlie", 22))
val names = people.map(_.name)
println(names)  // 输出:List(Alice, Bob, Charlie)
  • _.name 是一个匿名函数,表示提取每个 Person 对象的 name 属性。

.map 的特点

  1. 不可变性.map 不会修改原始集合,而是返回一个新的集合。

  2. 适用于所有可迭代集合:不仅限于 List,还可以用于 SeqArrayVector 等。

  3. 链式调用.map 的结果仍然是一个集合,因此可以链式调用其他集合操作:

    scala复制

    val result = numbers.map(_ * 2).filter(_ > 5).map(_.toString)

总结

.map 是Scala中用于对集合中的每个元素进行转换的高阶函数。它接收一个函数作为参数,对集合中的每个元素应用该函数,并返回一个包含转换结果的新集合。.map 是函数式编程的核心工具之一,能够以简洁的方式实现集合的批量操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值