在Scala中,.map 是一个非常重要的高阶函数,用于对集合中的每个元素应用一个函数,并返回一个新的集合,其中包含应用函数后的结果。.map 是函数式编程中的一个核心概念,它体现了“对集合中的每个元素进行某种转换”的思想。
核心概念
-
输入:一个集合(如
List、Seq、Array等)和一个函数。 -
操作:对集合中的每个元素应用这个函数。
-
输出:一个新的集合,包含对每个元素应用函数后的结果。
语法
.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 的特点
-
不可变性:
.map不会修改原始集合,而是返回一个新的集合。 -
适用于所有可迭代集合:不仅限于
List,还可以用于Seq、Array、Vector等。 -
链式调用:
.map的结果仍然是一个集合,因此可以链式调用其他集合操作:scala复制
val result = numbers.map(_ * 2).filter(_ > 5).map(_.toString)
总结
.map 是Scala中用于对集合中的每个元素进行转换的高阶函数。它接收一个函数作为参数,对集合中的每个元素应用该函数,并返回一个包含转换结果的新集合。.map 是函数式编程的核心工具之一,能够以简洁的方式实现集合的批量操作。
520

被折叠的 条评论
为什么被折叠?



