集合排序方式
欢迎大家交流不同意见和想法!!!!!!!
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自定义排序