我想按年龄对ArrayList
进行排序,然后,如果两个人的年龄相同,则按字母顺序对他们的名字进行排序。
这是我的代码:
import java.util.*
import kotlin.collections.ArrayList
fun main(args:Array<String>){
var listName=ArrayList<person>()
listName.add(person("ahmed",25))
listName.add(person("Fethi",28))
listName.add(person("abdou",28))
Collections.sort(listName)
for(person in listName){
println("the name:${person.name} and the age is:${person.age}")
}
}
class person(
var name:String?=null,
var age:Int=null
):Comparable<person> {
override fun compareTo(other: person): Int {
return this.age!!-other.age!!
}
}
我期望以下输出:
答案 0 :(得分:1)
根据您提供的示例,您要按年龄(升序)然后按名称按字母顺序对集合进行排序。
您可以通过使用sortedWith
扩展功能(接受Comparator
)在Kotlin中轻松实现此目标:
data class Person(val name: String, val age: Int)
fun main() {
val people = listOf(
Person("Ahmed", 25),
Person("Fethi", 28),
Person("Abdou", 28)
)
val comparator = Comparator.comparingInt(Person::age).thenComparing(Person::name)
val sortedPeople = people.sortedWith(comparator)
println(sortedPeople)
}
结果:
[Person(name=Ahmed, age=25), Person(name=Abdou, age=28), Person(name=Fethi, age=28)]
注意:我对Person
类和main
方法进行了一些更改,以遵循Kotlin约定和关于可变变量和可为空类型的最佳实践