scala高阶函数

目标:

掌握集合高阶函数的功能及用法

  1. map函数:
  2. foreach函数
  3. flatMap函数
  4. groupBy函数
  5. filter函数
  6. ilterNot函数
  7. sortWith函数
  8. sortBy函数
  9. reduce函数
    10.fold函数

路径:

  • 函数的语法
  • 函数的功能与应用场景

实施:

map函数的语法

final def map[B](f: (A) ⇒ B): List[B]
//map函数只有1个参数,这个参数是一个函数类型
f: (A) ⇒ B:f就是参数函数
//f有1个参数:A:代表集合中的每个元素
//f的返回值:B:B是A处理以后的返回值
List[A].map = List[B]
A1   ->  B1
	A2   ->  B2
……

举例:
//数据
val list = List(1,2,3,4,5,6,7,8,9,10)
//调用
//返回集合中每个元素的平方
scala> list.map(numb => numb*numb)
res1: List[Int] = List(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)

map函数的功能与应用场景

  • 功能:对集合中的每个元素调用参数函数来进行处理,将处理的结果放入一个新的集合返回
  • 应用:对每个元素进行处理,需要返回值的场景

foreach函数的语法

final def foreach(f: (A)Unit): Unit
//foreach有1个参数,是一个函数f
//f这个函数有1个参数:A:代表集合中的每个元素
//f这个函数没有返回值

举例:
//数据
val list = List(1,2,3,4,5,6,7,8,9,10)
//调用
//输出集合中的每个元素
 scala> list.foreach(i => println(i))
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10

foreach函数的功能与应用场景

  • 功能:将集合中的每个元素进行处理,但是没有返回值
  • 应用:一般用于将集合的数据进行输出或者保存:将数据结果打印或者写入外部文件系统

flatMap函数的语法

final def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): List[B]
//flatMap有1个参数f,是一个函数
//f这个函数有1个参数:A:集合中的每个元素
//f这个函数有返回值: GenTraversableOnce[B],对每个A处理以后返回的结果,是一个集合,集合中有多个元素B
//flatMap返回值是:List[B]:将每个A返回的集合进行合并
基本原理:f:调用每个元素进行map处理,map返回值是List,每个元素放回一个集合,最终每个元素处理的结果:List[List[B]]
flatMap会将这个List[List[B]] 变成List[B]

举例:
//数据
val list = List("hadoop spark"," spark","hive hbase ","hue hue spark"," hue ")
//调用
//将所有单词放入一个集合中
scala> list.flatMap(line => line.trim.split(" "))
res15: List[String] = List(hadoop, spark, spark, hive, hbase, hue, hue, spark, hue)

flatMap函数的功能

  • 功能:对多层集合结构,进行降维处理,实现扁平化的操作
  • 应用:扁平化

groupBy函数的语法

def groupBy[K](f: (A) ⇒ K): Map[K, List[A]]
//groupBy传递一个参数f:函数参数
//f有一个参数:A:每个元素
	(key,value)
	(tup1,tup2,tupe3)
//f有一个返回值:K:按照谁分组
//groupBy返回值:Map[K, List[A]],每个KV代表一组
	K:分组的那个组
	V:List[A],符合K的所有A的集合

举例:
//数据
val list = List(2,4,6,8,9,7,5,3,1)
//调用
//集合进行处理,按照奇偶数进行分组
scala> list.groupBy( x => x%2==0).foreach(println)
(false,List(9, 7, 5, 3, 1))
(true,List(2, 4, 6, 8))

groupBy函数的功能

  • 功能:指定按照对应的值进行分组
  • 应用:分组

filter函数的语法

def filter(p: (A)Boolean): List[A]
//filter函数传递1个参数:p:函数
//p的参数:A:每个元素
//p的返回值:Boolean,一般是表达式的结果
//filter的返回值:List[A] :所有符合表达式的元素的集合

举例:
//数据
val list = List(1,2,3,4,5,6,7,8,9,10)
//调用
//返回集合中所有的偶数
scala> list.filter( x => x % 2 == 0)
res20: List[Int] = List(2, 4, 6, 8, 10)

filter函数的功能

  • 功能:用于实现对集合中的数据进行过滤,将符合条件表达式的数据放入一个新的集合返回

filterNot函数的语法

def filter(A => 条件表达式):List[A]

filterNot函数的功能

  • 功能:用于对集合元素的过滤,将不符合条件的数据放入一个新的集合中

sortWith函数的语法

def sortWith(lt: (A, A)Boolean): List[A]
//sortWith有一个参数:lt:函数
//lt传递两个参数:(A,A):每次取集合中两个元素来处理
//lt返回值:表达式的Boolean值:判断大小的条件
//sortWith的返回值:List[A]:根据判断构建有序的结果
举例:
//数据
val list = List(2,4,6,8,9,7,5,3,1)
//调用
//对集合进行升序排序
scala> list.sortWith((a,b) => a < b )
res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

sortWith函数的功能

  • 功能:对集合中的元素进行两两比较,实现排序

sortBy函数的语法

def sortBy[B](f: (A) ⇒ B)(implicit ord: math.Ordering[B]): List[A]
//sortBy传递一个参数f:函数
//f的参数:A:集合中的每个元素
//f的返回值:B:按照A中的什么进行排序
//sortBy返回的是排序好的结果

举例:
//数据
val list = List(2,4,6,8,9,7,5,3,1)
//调用
//对list集合进行升序排序
scala> list.sortBy(x => x)
res26: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

sortBy函数的功能

  • 功能:对集合中的元素进行排序,按照参数函数的返回值进行排序
    reduce函数的语法
def reduce(op: (A1, A1) ⇒ A1): A1
//reduce传递1个:op
//op传递2个参数:(T, A)
T:临时变量,用于存储中间结果,tmp的初始值为第一个元素
A:集合中的每个元素
//op返回值:A1:聚合的结果
//reduce返回值:A1:聚合的结果

举例:
//数据
val list = List(2,4,6,8,9,7,5,3,1)
//调用
//对list集合进行处理,计算所有元素的乘积
list.reduce((tmp,item) => tmp*item)

reduce函数的功能

  • 功能:对集合中的元素进行聚合计算
    fold函数的语法
def fold(z: A1)(op: (A1, A1) ⇒ A1): A1
//fold:两个参数
//z:临时变量的初始值
//op:函数:聚合逻辑

举例:
//数据
val list = List(2,4,6,8,9,7,5,3,1)
//调用
//对list集合进行处理,计算所有元素的乘积
list.fold(1)((tmp,item) => {
	println(s"tmp = ${tmp}  item = ${item}")
	tmp*item
})

fold函数的功能

  • 功能:对集合中的元素进行聚合计算,需要指定初始值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值