map映射 :它是针对集合的典型变换操作,它将集合中的每一个元素通过指定的函数映射到一个新的结果集合中。
下面来看一下使用map映射解决一个实际问题。
请将names1 = List(“Tony”,“Tom”,“Mary”)中的所有名字都改为大写 ,将其结果放到一个新的集合中返回,即返回一个新的List(TONY, TOM, MARY)
object mapExer01 {
def main(args: Array[String]): Unit = {
//利用map映射将list1中的所有元素装换为大写
val names1 = List("Tony","Tom","Mary","Jack")
val names2 = names1.map(upperString)
println(names2)
}
def upperString(s: String): String ={
s.toUpperCase()
}
}
结果为:List(TONY, TOM, MARY, JACK)
这里对map映射的过程做几点说明:
- map 是一个高阶函数,它可以接收一个函数(scala中函数也可以当做是一个参数)
- 这里我们传的是方法,但是会转成函数
- 通过map的操作,返回一个新的集合names2
- 底层会遍历names1的所有元素,并传递给upperString,将upperString的结果封装成新的集合并返回
- names1这个集合本身没有发生变化
flatMap映射: 它是对map映射的一种扩展。在flatMap中,我们会传入一个函数,该函数对每个输入都会返回一个集合(而不是一个元素),最后flatMap将最终的所有集合压平成一个新的集合。
例如下面的例题本来结果应该是List(‘T’,‘O’, ‘N’, ‘Y’),List(‘T’,‘O’,‘M’)…,最终经过flatMap压平成List(T, O, N, Y, T, O, M, M, A, R, Y, J, A, C, K)
object mapExer02 {
def main(args: Array[String]): Unit = {
/*
flatmap映射:flat即压扁,压平,扁平化映射 即相当于将集合中的每一个元素都当作为一个新的集合,再次打散进行相应的操作
*/
val names1 = List("Tony","Tom","Mary","Jack")
val names2 = names1.flatMap(upperString) //这里注意names1中的每个元素(字符串)也是一个集合
println(names2)
}
def upperString(s: String): String ={
s.toUpperCase()
}
}
结果为:List(T, O, N, Y, T, O, M, M, A, R, Y, J, A, C, K)