2021年大数据常用语言Scala(二十五):函数式编程 排序

举报
Lansonli 发表于 2021/09/28 22:21:19 2021/09/28
【摘要】 目录 排序 默认排序  sorted 指定字段排序  sortBy 自定义排序 | sortWith 排序 在scala集合中,可以使用以下几种方式来进行排序 sorted默认排序sortBy指定字段排序sortWith自定义排序   默认排序  sorted 示例 定义一个...

目录

排序

默认排序  sorted

指定字段排序  sortBy

自定义排序 | sortWith


排序

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

  • sorted默认排序
  • sortBy指定字段排序
  • sortWith自定义排序

 

默认排序  sorted

示例

定义一个列表,包含以下元素: 3, 1, 2, 9, 7

对列表进行升序排序

 

参考代码


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

 

指定字段排序  sortBy

根据传入的函数转换后,再进行排序


方法签名

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

方法解析

sortBy方法

API

说明

泛型

[B]

按照什么类型来进行排序

参数

f: (A) ⇒ B

传入函数对象<br />接收一个集合类型的元素参数<br />返回B类型的元素进行排序

返回值

List[A]

返回排序后的列表

 

示例

有一个列表,分别包含几下文本行:"01 hadoop", "02 flume", "03 hive", "04 spark"

请按照单词字母进行排序

 

参考代码


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

 

自定义排序 | sortWith

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

类似在Java中实现Comparable接口

方法签名

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

方法解析

sortWith方法

API

说明

参数

lt: (A, A) ⇒ Boolean

传入一个比较大小的函数对象<br />接收两个集合类型的元素参数<br />返回两个元素大小,小于返回true,大于返回false, 也就是升序排序的意思, 如果要实现降序, 可以自行控制小于返回false 大于返回true<br />不用去想这两个参数是如何传递的, scala会自动帮我们将带处理列表的元素两两传递过来让我们进行排序

返回值

List[A]

返回排序后的列表

 

示例

有一个列表,包含以下元素:2,3,1,6,4,5

使用sortWith对列表进行降序排序

 

参考代码


  
  1. scala> val a = List(2,3,1,6,4,5)
  2. a: List[Int] = List(231645)
  3. scala> a.sortWith((x,y) => if(x<y)true else false)
  4. res15: List[Int] = List(123456)
  5. scala> res15.reverse
  6. res18: List[Int] = List(654321)

使用下划线简写上述案例

 

参考代码


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

两个参数都是只出现一次, 并没有嵌套, 那么可以用下划线代替

第一个下划线代表参数1

第二个下划线代表参数2

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/116547716

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。