繁体   English   中英

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

[英]How can I sort an ArrayList of custom objects?

我想按年龄对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. 艾哈迈德25
  2. 阿卜杜28
  3. fethi 28

根据您提供的示例,您想要按年龄(升序)然后按字母顺序按名称对集合进行排序。

您可以通过使用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约定和关于可变变量和可为空类型的最佳实践

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM