map()
将 集合 中的 每个元素 传入 函数 后,生成一个新元素,并将 新元素 组成一个 集合,并返回该集合
注意:map处理前后的元素数量是相同的
要向 map() 函数传递一个 函数
返回值类型
根据lambda表达式返回的类型,决定 m.map() 的返回类型
当lambda表达式返回类型是 2个元素的tuple 时,m.map() 的返回类型是 Map[Sring,Int]
lambda表达式返回类型是 其他类型时,m.map() 的返回类型是 immutable.Iterable
例子
将流中的每个数据乘2
val l=List(1,2,3,4)
val l2=l.map(_ * 2)
l2.foreach(println)
flatten
扁平化,如下面代码:List里面的每一个元素是List时(嵌套List),调用 flatten,可将里面的List的元素取出来组合成一个List
例子
val l=List(List(1,2),List(3,4),List(5,6))
l.foreach(println)
val l2=l.flatten
l2.foreach(println)
flatMap
相当于先调用 map() ,然后调用 flatten
针对迭代器的序列中的每个元素应用函数f,并返回指向结果序列的迭代器。
要向 flatMap() 传递一个函数,该函数要返回一个迭代器(也可以是集合)
例子
将集合 val l=List("李雷 lili","韩梅梅 lucy"),转成下面这种:
List(李雷, lili, 韩梅梅, lucy)
方式一
map()实现:
val l=List("李雷 lili","韩梅梅 lucy")
val l2=l.map(_.split(" ")) //l2是List,里面的元素是Array类型
for(it <- l2){
for(it2 <- it){
println(it2)
}
}
方式二
通过 flatten 简化:
val l=List("李雷 lili","韩梅梅 lucy")
val l2=l.map(_.split(" ")).flatten
l2.foreach(println)
方式三
通过 flatMap() 一步到位:
val l=List("李雷 lili","韩梅梅 lucy")
val l2=l.flatMap(_.split(" "))
l2.foreach(println)
reduce()
reduce() 函数会对集合中元素进行聚合:
- 将集合中的 第 1、2 个元素传给 lambda表达式,计算后得出结果
- 再将该结果与第3个元素 传给 lambda表达式,计算后得出结果
- 以此类推,最后得到结果
例子
求集合元素累加和
val l=List(1,2,3,4)
val res=l.reduce(_ + _)
println(res)
groupBy
按照指定的规则对集合的元素进行分组,返回 Map,key是传入函数的计算结果,value是List类型(分到该组的元素)
例子
按照姓氏对姓名进行分组
val l=List("李雷","李四","韩梅梅","lili","lucy")
val m=l.groupBy(_.take(1))
println(m)
按照姓名进行分组
val l=List("李雷","lili","韩梅梅","lili","李雷","lucy")
val m=l.groupBy(e=>e)
println(m)
filter
根据规则 对数据进行 筛选过滤,符合规则的数据 保留,不符合规则的数据 丢弃。
例子
val l=List("李雷","韩梅梅","lili","lucy")
//集合中的元素,其首字母是l的,取出组成新集合
val l2=l.filter(_.take(1)=="l")
l2.foreach(println)



