我使用下面的sortwith方法对ArrayList进行排序,我想它会将订单号从小数字排序到大数字。如10,9,8,7,6 .... 0。但结果并不是我的预期。请帮助解决这个问题。
companyList.add(companyReg)
companyList.sortedWith(compareBy { it.order })
for (obj in companyList) {
println("order number: "+obj.order)
}
答案 0 :(得分:5)
见这个例子:
fun main(args: Array<String>) {
val xx = ArrayList<Int>()
xx.addAll(listOf(8, 3, 1, 4))
xx.sortedWith(compareBy { it })
// prints 8, 3, 1, 4
xx.forEach { println(it) }
println()
val sortedXx = xx.sortedWith(compareBy { it })
// prints sorted collection
sortedXx.forEach { println(it) }
}
为什么这样可行?因为在Kotlin中,大多数集合都是不可变的。 collection.sortedWith(...)
是一个扩展函数,它返回集合的排序副本,但实际上你忽略了这个结果。
Ofc您可以使用其他方法修改集合(例如.sort()
)或Collections.sort(collection, comparator)
。这种排序方式不需要分配新的集合(因为没有新的集合,只修改了当前的电流)。
答案 1 :(得分:1)
试试这个
companyList = companyList.sortedWith(compareBy { it.order })
您可以在此处查看文档https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-with.html