在学习scala的过程中,其中的集合确实会难倒很多人,今天就主要分享我对sortBy函数的理解

这是官网对sortBy函数的解释和例子,个人对此没有怎么看懂,因此自己摸索实践,慢慢总结出来自己的想法,

这个是在编译器里面自动出来的

首先我们看,这个sortBy[B],第一个B是指返回值,

括号里面的f:(Int)=>B代表传入一个参数,这个参数类型是Int类型,这个函数的返回值是B类型的

后面的implicit ord:Ordering[B]这个是排序的规则

话不多说,上代码案例

 

第一个案例是对一个整数型的list进行排序

@Test
def testInt(): Unit ={
  var list = List(1,2,3,6,4,8,9,0)
  println(list.sortBy(sortIntRule))
}

def sortIntRule(i:Int) ={
   i match {
     case 1=> 2
     case 2=> 1
     case 3=> 4
     case _=> 0
   }
}

这个排序的规则是,传入这个函数,必须只有一个Int类型的参数,然后进行类型匹配,遇到1了按照2进行排序,遇到2了按照1进行

排序,这样真正排序下来是2再到1,遇到3了按照4开始排序,其他的都按照0排序,也就是最小的,这样的意思就是除了1,2,3的其

他数据都是按照0排序,也就是最小的,在这个LIST中应该6,4,8,9,0,然后接下来按照模式匹配后的顺序排序,也就是1,2,4,

对应list里面的2,1,3,总的排序结果就是6,4,8,9,0,2,1,3

测试结果如上图

第二个案例是对对象进行排序


首先我定义了一个person类,并有默认传参,这里变量为大写主要是为了不冲突

package exercise.dtoclass Person(age:Int,name:String,salary:Int) {var AGE = agevar NAME = namevar SALARY = salaryoverride def toString = s"Person($AGE, $NAME, $SALARY)"
}

然后写他的测试方法

@Test
def TestSortBy(): Unit = {val personOne = new Person(18, "zhangsan", 10000)val personTwoA = new Person(20, "lisiA", 9000)val personTwoB = new Person(20, "lisiB", 10000)val personThree = new Person(15, "wangwu", 8000)var list = new ListBuffer[Person]list.+=(personOne, personTwoA,personTwoB, personThree)println(list.sortBy(sortRule)(Ordering.Tuple2(Ordering.Int.reverse, Ordering.Int.reverse)))
}def sortRule(person: Person): (Int, Int) = {(person.AGE, person.SALARY)
}

这里我传入的函数是sortRule,这个函数的意思是根据person对象的年龄和薪水进行排序,如果年龄出现一样的再按照薪水进行排序

然后后面的Ording,Tuple2(Ordering.Int.reverse,Ordering.Int.reverse)意思是有两个参数的元组,第一个Int型的按照从大到小排序,

reverse指从大到小排序,第二个也是从大到小排序,默认是从小到大的排序。

执行结果如上图,

希望对大家有所帮助哦

scala神奇的sortBy方法相关推荐

  1. jQuery回调、递延对象总结(中篇) —— 神奇的then方法

    前言: 什么叫做递延对象,生成一个递延对象只需调用jQuery.Deferred函数,deferred这个单词译为延期,推迟,即延迟的意思,那么在jQuery中 又是如何表达延迟的呢,从递延对象中的t ...

  2. Scala知识点21---高阶方法

    Scala有一个当初差点挤掉JAVA地位的东西,就是高阶方法,也叫高阶函数,大家可以想一下JAVA的lambda表达式,或者是函数式接口这些JAVA推出的简化开发的方法,其实JAVA之所以推出这些就是 ...

  3. 手把手教你学python第十三讲(MRO详解和神奇的魔法方法)

    如果图片刷不出来,转到https://www.bilibili.com/read/cv286207 MRO重制 关于MRO和C3算法,我又去看了一些文章,然后发现了讲的很清楚的文章http://kai ...

  4. scala中的split方法

    scala中的split方法 1.对split方法的细节观察 scala> val s = "eggs, milk, butter, Coco Puffs" s: Strin ...

  5. scala yield的使用方法

    scala yield的使用方法 今天无意间发现这个就琢磨了一下,就如下例子讲述一下自己的看法,希望有错的地方,大家能够指教指教. yield的用法一个句话,就是在for循环中,每次循环都会产生一个值 ...

  6. Scala中的apply方法

    1.apply的场景 Scala中实例化一个类,可以不用new , 其原因 其实就是 apply 方法,具体原因 后边再讲: 在上句中Scala 生成Array对象, 会自动去调用 Array 这个伴 ...

  7. scala中sorted,sortby,sortwith的用法(转)

    scala中sorted,sortWith,sortBy用法详解 2017年07月23日 23:07:51 bitcarmanlee 阅读数:9249 版权声明:本文为博主原创文章,未经博主允许不得转 ...

  8. scala的字符串的方法(五)

    1.创建一个字符串 以下是创建一个字符串的代码 - var greeting = "Hello world!";// 或者var greeting:String = "H ...

  9. Scala基础 - 函数和方法的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1. 函数和方法 在Scala中函数是一等公民,你可以像操作数字一样将函数赋值给一个变量.使用val语句可以定义函数,def语 ...

最新文章

  1. python二级考试试题4答案_第4卷讲解Python语言计算机等级考试二级操作题
  2. ld-linux-x86-64.so.2+,RedHat6安装Oracle数据库遇到错误 C [ld-linux-x86-64.so.2+0x14d70]
  3. 修改机器名、IP对arcgis server、portal的影响?
  4. Spring 注解配置
  5. 一份平民化的应用性能优化检查列表(完整篇)--转
  6. java安全编码指南之:死锁dead lock
  7. 分金币 Uva 11300
  8. java源码文件丢恢复需要多少钱,上岸蚂蚁金服!
  9. 微软首席技术官:不清楚平板是否昙花一现
  10. VGA常用分辨率及计算方法
  11. Python-Level2-day11:TCP客户端/服务端传输(循环模型之短连接与长连接形态);TCP粘包问题;与UDP对比;数据传输过程原理;
  12. 自定义列表数据自动循环向下滚动view(类似于通知通报消息)
  13. 1209磊磊的随机数
  14. uniapp-路由和navigate跳转
  15. vue中rule数据校验
  16. ​LeetCode刷题实战623:在二叉树中增加一行
  17. python保留两位小数_python保留小数位的三种实现方法
  18. ccs中c语言定义布尔常量,ccs库里面有变量的定义,我在添加了头文件后编译显示没有定义变量呢...
  19. 共识算法POW原理及实现
  20. TM4C1294使用

热门文章

  1. 离开你,才知道如此的痛
  2. 人工智能模型数据泄露的攻击与防御研究综述论文阅读总结
  3. Linux 系统下用C进行进程管理(生产者-消费者问题)
  4. python列表推导式生成随机数_python列表推导式
  5. 一个程序员离乡时的真情告白
  6. puppet部署mysql_puppet之mysql批量安装案例
  7. 数码相框(LCD、I2C)
  8. python mta 模拟试题_统计模拟试题
  9. 自动采集工具全面解析,八大方面详细介绍
  10. Ubuntu20.04 xrdp多人远程桌面访问