从Kotlin中的MutableList排序数据

时间:2017-10-21 22:57:56

标签: list kotlin mutable

我是Kotlin的新手,需要询问有关订购MutableList<MyObject>的一些问题。据我了解,我可以为myMutableList.sortBy {it.int}myMutableList.sortByDescending {it.int}执行IntString。但返回始终为Unit,而不是MutableList

我哪里出错了,我该怎么办?

5 个答案:

答案 0 :(得分:10)

Mutable意味着可更改,因此有意义的是,而不是sortBy返回新列表,项目的顺序已在当前列表中“就地”更改。

尝试在myMutableList之后查看sortBy中项目的顺序,您会看到它们现在处于请求的顺序。

答案 1 :(得分:4)

kotlin函数sortsortBy等等都对列表中的项进行排序。来自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}