位置:首页 > Scala > Scala 里 groupBy 与 sorted 怎么用:分组、排序与选型一次讲清

Scala 里 groupBy 与 sorted 怎么用:分组、排序与选型一次讲清

时间:2026-08-23  |  作者:骑光打字机  |  阅读:0

0.Scala函数式编程

函数式编程在我们未来基于Spark/Flink的大量业务代码中,那可是大有用武之地。开发过程中,以下这些函数式编程的应用相当常见。需要注意的是,这些函数主要是对Scala集合进行操作,一般可分为两类:转换操作(transformation)和行动操作(actions,也有人习惯称之为聚合操作)。转换操作会将一个集合转变为另一个集合,而行动操作则会返回某种类型的值。

  1. 遍历( foreach )
  2. 映射( map )
  3. 映射扁平化( flatmap )
  4. 过滤( filter )
  5. 是否存在( exists )
  6. 排序( sorted 、 sortBy 、 sortWith )
  7. 分组( groupBy )
  8. 聚合计算( reduce )
  9. 折叠( fold )

1.groupBy分组的使用详解

【1.1 语法结构】

Scala 里 groupBy 与 sorted 怎么用:分组、排序与选型一次讲清_wishdown.com

【1.2 groupBy流程展示】

Scala 里 groupBy 与 sorted 怎么用:分组、排序与选型一次讲清_wishdown.com

【1.3 代码演示】

scala> val a = List("张三"->"男", "李四"->"女", "王五"->"男")
a: List[(String, String)] = List((张三,男), (李四,女), (王五,男))
// 按照性别分组
scala> a.groupBy(_._2)  //._2这是元组的取数方法,表示取元组的第二个元素
res0: scala.collection.immutable.Map[String,List[(String, String)]] = Map(男 -> List((
张三,男), (王五,男)),
女 -> List((李四,女)))
87
// 将分组后的映射转换为性别/人数元组列表
scala> res0.map(x => x._1 -> x._2.size)
res3: scala.collection.immutable.Map[String,Int] = Map(男 -> 2, 女 -> 1)

尖叫提示:

其实分组中还可以用partition,功能跟groupBy差不多,但是注意其返回值不一样。最终的格式也不一应。

scala> val numbers = Seq(3, 7, 2, 9, 6, 5, 1, 4, 2)
numbers: Seq[Int] = List(3, 7, 2, 9, 6, 5, 1, 4, 2)

scala> numbers.partition(n => n % 2 == 0)
res32: (Seq[Int], Seq[Int]) = (List(2, 6, 4, 2),List(3, 7, 9, 5, 1))

scala> numbers.groupBy(n => n % 2 == 0)
res33: scala.collection.immutable.Map[Boolean,Seq[Int]] = Map(false -> List(3, 7, 9, 5, 1), true -> List(2, 6, 4, 2))

2.排序sorted使用详解

在scala集合中,可以使用以下几种方式来进行排序

  1. sorted默认排序
  2. sortBy指定字段排序
  3. sortWith自定义排序

2.1默认排序sorted

scala> List(3,1,2,9,7).sorted
res16: List[Int] = List(1, 2, 3, 7, 9)

2.2指定字段排序 | sortBy

def sortBy[B](f: (A)  B): List[A]

Scala 里 groupBy 与 sorted 怎么用:分组、排序与选型一次讲清_wishdown.com

scala> val a = List("01 hadoop", "02 flume", "03 hive", "04 spark")
a: List[String] = List(01 hadoop, 02 flume, 03 hive, 04 spark)
// 获取单词字段
scala> a.sortBy(_.split(" ")(1))
res8: List[String] = List(02 flume, 01 hadoop, 03 hive, 04 spark)

2.3 自定义排序 | sortWith

自定义排序,根据一个函数来进行自定义排序

def sortWith(lt: (A, A)  Boolean): List[A]

Scala 里 groupBy 与 sorted 怎么用:分组、排序与选型一次讲清_wishdown.com

【代码演示】

//基础函数
scala> val a = List(2,3,1,6,4,5)
a: List[Int] = List(2, 3, 1, 6, 4, 5)

scala> a.sortWith((x,y) => if(xtrue else false)
res15: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> res15.reverse
res18: List[Int] = List(6, 5, 4, 3, 2, 1)

//简化函数
scala> val a = List(2,3,1,6,4,5)
a: List[Int] = List(2, 3, 1, 6, 4, 5)

// 函数参数只在函数中间出现一次,可以使用下划线代替
scala> a.sortWith(_ < _).reverse
res19: List[Int] = List(6, 5, 4, 3, 2, 1)

《夸克》非常好用的免费AI浏览器

下载APP查看

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多