scala 非常重要的高阶函数

函数名

说明

示例

map

映射,把一个集合转换为另外一个集合。集合中元素个数不变

 //> res1: List[Int] = List(2, 3, 4, 5, 6, 7)

  val1.map { x => x+1 }     

 //> res2: List[String] = List(Y1, Y2, Y3, Y4, Y5, Y6)

  val1.map { x => "Y"+x }      

 

//> res2: List[String] = List(y1, y2, y3, y4, y5, y6)

  val1.map { x => "Y"+x }.map { x => x.toLowerCase() }

flatMap

扁平化map方法

也是映射方法,会概念元素的形式,此外元素个数也会变化

val l7=List("hello,world","hello,hadoop","hello,1811")

val l9=l7.flatMap { x => x.split(",") }   //> l9  : List[String] = List(hello, world, hello, hadoop, hello, 1811)

filter

过滤

//> res3: List[Int] = List(4, 5, 6)             

  val1.filter { x => x>3 }
 

 //> res4: List[Int] = List(6)                         

  val1.filter { x => x>4 }.filter { x => x%2==0 }

reduce 

归约,reduce的过程:将上次的运行结果和下一个值进行运算
函数接收两个参数 => 返回一个值

 //> res5: Int = 21

  val1.reduce{(x,y)=>x+y}  

 

内部的执行过程:

(1,2)                 => 1+2        第一次运算

((1+2),3)         => 3+3        第二次运算

((3+3),4)        => 6+4        第三次运算

 

和大数据中的mapreduce不同的时,大数据中的reduce的参数是键值对,而这里可以是任意对象。

groupBy

按指定规则做聚合,最后将结果返回到一个map映射里

 

 

//> res7: scala.collection.immutable.Map[Int,List[Int]] = Map(5 -> List(5),

  // 1 ->List(1), 6 -> List(6), 2 -> List(2), 3 -> List(3), 4 -> List(4))

  val1.groupBy { x => x }   

 

var v2 = List(("北京",1),("上海",3),("天津",2), ("北京",2), ("北京",1), ("上海",4), ("北京",2))

v2.groupBy{x=>x._1}
 

运行结果:

Map(

上海->List((上海,3),(上海,4)),

北京->List((北京,1),(北京,2) ,(北京,1) ,(北京,2),

天津->List((天津,2))

)
 

val2.groupBy(x=>x._1).filter(x=>x._1=="bj").mapValues(x=>x.map(i=>i._2).reduceLeft((a,b)=>a+b))

mapValues

对map集合中的做映射

注:只有map类型有

//结果为map的value值:1 2 3 4

  val3.mapValues { x => println(x) }

 

//结果为元组的第二列值:tom rose jim

val val4=Map("k1"->("name","tom"),"k2"->("name","rose"),"k3"->("name","jim"))
 

Map(k1 -> tom, k2 -> rose, k3 -> jim)

val4.mapValues { x => x._2 }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任错错

如果对您有帮助我很开心

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值