如何对自定义对象的ArrayList排序?

时间:2019-04-27 11:31:53

标签: android kotlin

我想按年龄对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!!

    }
}

我期望以下输出:

  1. ahmed 25
  2. abdou 28
  3. fethi 28

1 个答案:

答案 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约定和关于可变变量和可为空类型的最佳实践