我是Kotlin的新手,需要询问有关订购MutableList<MyObject>
的一些问题。据我了解,我可以为myMutableList.sortBy {it.int}
和myMutableList.sortByDescending {it.int}
执行Int
和String
。但返回始终为Unit
,而不是MutableList
。
我哪里出错了,我该怎么办?
答案 0 :(得分:10)
Mutable意味着可更改,因此有意义的是,而不是sortBy
返回新列表,项目的顺序已在当前列表中“就地”更改。
尝试在myMutableList
之后查看sortBy
中项目的顺序,您会看到它们现在处于请求的顺序。
答案 1 :(得分:4)
kotlin函数sort
,sortBy
等等都对列表中的项进行排序。来自sort
的文档:
根据元素的自然顺序对数组进行排序。
如果您不想在原地对元素进行排序,而是返回已排序的列表(您的基础不需要是MutableList
),则可以使用sorted
,{{ 3}}等等:
返回根据其自然排序顺序排序的所有元素的列表。
答案 2 :(得分:0)
要对可变列表进行排序,您可以使用:
Collections.sort(myMutableList)
Collections.reverse(myMutableList) //To sort the list by descending order
在kotlin你可以使用合约kotlin stdlib指令,它变成:
myMutableList.sort()
myMutableList.reverse() //To sort the list by descending order
然后你可以打电话给myMutableList
,它的顺序也会改变,就像这样:
val myMutableList = mutableListOf(8,5,4,6)
System.out.println("myMutableList: ${myMutableList[0]}")
myMutableList.sort()
System.out.println("myMutableList: ${myMutableList[0]}")
输出:
myMutableList: 8
myMutableList: 4
答案 3 :(得分:0)
您可以对列表中的对象的属性执行类似的操作,因此,假设您有一个带有字符串和数字的对象
data class MyObject(var name:String,var number:Int)
为其添加一些值
val myObjectList: MutableList<MyObject>? = mutableListOf()
myObjectList!!.add(MyObject("C",3))
myObjectList.add(MyObject("B",1))
myObjectList.add(MyObject("A",2))
然后您可以按其任意一个属性对其进行排序,它将返回具有排序值的可变列表
var sortedByName = myObjectList.sortedBy { myObject -> myObject.name }
var sortedByNumber = myObjectList.sortedBy { myObject -> myObject.number }
答案 4 :(得分:0)
您可以使用 mutableList 的扩展方法。喜欢
list.sort()
list.sortBy{it.value}
list.sortByDescending()
list.sortByDescending{it.value}