Как я могу отсортировать ArrayList пользовательских объектов? - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу отсортировать 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. Фетхи 28

1 Ответ

1 голос
/ 27 апреля 2019

Согласно приведенному вами примеру, вы хотите отсортировать коллекцию по возрасту (по возрастанию), а затем по имени в алфавитном порядке.

Этого легко добиться в Kotlin, используя функцию расширения sortedWith(который принимает Comparator):

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 илучшие практики для изменяемых переменных и обнуляемых типов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...