scala的函数式编程的分组 | GROUPBY

分组 | GROUPBY
我们如果要将数据按照分组来进行统计分析,就需要使用到分组方法
定义
groupBy表示按照函数将列表分成不同的组
方法签名
scala def groupBy[K](f: (A) ⇒ K): Map[K, List[A]]
方法解析
| groupBy方法 | API | 说明 | | ----------- | --------------- | ------------------------------------------------------------ | | 泛型 | [K] | 分组字段的类型 | | 参数 | f: (A) ⇒ K | 传入一个函数对象
接收集合元素类型的参数
返回一个K类型的key,这个key会用来进行分组,相同的key放在一组中 | | 返回值 | Map[K, List[A]] | 返回一个映射,K为分组字段,List为这个分组字段对应的一组数据 |
groupBy执行过程分析:
在这里插入图片描述
示例
有一个列表,包含了学生的姓名和性别:
scala “张三”, “男” “李四”, “女” “王五”, “男”
请按照性别进行分组,统计不同性别的学生人数
步骤
定义一个元组列表来保存学生姓名和性别
按照性别进行分组
将分组后的Map转换为列表:List((“男” -> 2), (“女” -> 1))
参考代码
scala scala> val a = List("张三"->"男", "李四"->"女", "王五"->"男")
a: List[(String, String)] = List((张三,男), (李四,女), (王五,男))
在这里插入图片描述
// 按照性别分组
scala> a.groupBy(.2)
res0: scala.collection.immutable.Map[String,List[(String, String)]] = Map(男 -> List((张三,男), (王五,男)), 女 -> List((李四,女)))

// 将分组后的映射转换为性别/人数元组列表 scala> res0.map(x => x.1 -> x.2.size)
res3: scala.collection.immutable.Map[String,Int] = Map(男 -> 2, 女 -> 1)

发布了106 篇原创文章 · 获赞 301 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_45765882/article/details/104244408