scala的所有排序

集合排序方式

欢迎大家交流不同意见和想法!!!!!!!

1:集合单独排序:

对象.sort()
或者直接存在sortedset集合中
val list = List(45, 23, 23, 5, 3, 55)
	val sted = list.sorted
val sortby = list.sortBy(t => t)
val set = mutable.SortedSet(2, 4, 1, 4, 5, 3)
println(set)

2:单词排序:单次排序

   **(1)用sortwith**   
  也可以用sortby等。最终调用都是sorted。
 def wordCount(): Unit = {
println("单词统计并排序-----------------")
//读取文件:安每行读取,统计
val words = Source.fromFile("words.txt").getLines()
val map = mutable.Map[String, Int]()
for (word <- words) {
  var ww = word.split("\\s+") //切分每行数据
  ww.foreach(ws => {
    map.put(ws, map.getOrElse(ws, 0) + 1)
  })
}
println(map)//已经存到map集合

//sortwith输入两个参数返回一个boolean值
var sortedlist:List[(String,Int)]=map.toList.sortWith((kv1: (String, Int), kv2:(String, Int)) =>{
  //按照次数
  val ck1=kv1._1
  val ck2=kv2._1
  ck1.compareTo(ck2)>0
  
})
println("sortedwith"+sortedlist)

二次排序

实现二次排序的三种方式
sortby
sortwith
或者采用自定义排序

//1:利用sortby进行二次排序
def wordCount(): Unit = {
println(“单词统计---------------先安次数升序,次数相同安单词升序-----------------”)
//读取文件:安装每行读取,统计
val words = Source.fromFile(“F:\java\soft\idea\IDEA_test_All\test_maven_All\scala_demo03\src\main\scala_wordsCount\words.txt”).getLines()

val map = mutable.Map[String, Int]()
for (word <- words) {
  var ww = word.split("\\s+") //切分每行数据
  ww.foreach(ws => {
    map.put(ws, map.getOrElse(ws, 0) + 1)
  })
}
println(map)

var sortedlistby:List[(String,Int)]=map.toList.sortBy( t=>t)(new Ordering[(String,Int)](){
  override def compare (x: (String, Int), y: (String, Int)): Int = {
    //规则1
    var  ret=x._2.compareTo(y._2)
    if(ret==0){//规则2
    ret=x._1.compareTo(y._1)
    }
    ret
  }
})
println("sortedwithby"+sortedlistby.mkString(","))

}

//排序方法二:自定义排序-----》继承ordered
def sortgather(): Unit ={
println(“自定义排序方法一:继承ordered”)
val set =mutable.SortedSet(new person(“zs”,33),
new person(“ls”,23),
new person(“ws”,43))
println(set)
}
}
class person extends Ordered[person]{
var name:String= _
var age:Int= _
def this(name:String,age:Int){
this()
this.name=name
this .age=age
}
override def toString: String = this.name+this.age
override def compare(that: person) = {
var sort01=this.age.compareTo(that.age)//排序规则1
if(sort01==0){
sort01=this.name.compareTo(that.name)//排序规则2
}
sort01
}
}

//排序方法三–自定义排序:new ordering
def sortgather(): Unit = {
println(“集合排序----方法2”)
val set = mutable.SortedSet(new person(“zs”, 33),
new person(“ls”, 23),
new person(“ws”, 43))(new Orderingperson {
override def compare(x: person, y: person): Int = {
var sort01 = x.age.compareTo(y.age) //排序规则1
if (sort01 == 0) {
sort01 = x.name.compareTo(y.name) //排序规则2
}
sort01
}
})
println(set)
}

class person {
var name: String = _
var age: Int = _
def this(name: String, age: Int) {
this()
this.name = name
this.age = age
}
override def toString: String = this.name + this.age
}
scala自定义排序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值