sortby sort example kotlin

sort - Ordenar colección por múltiples campos en Kotlin



sort arraylist kotlin (2)

Esta pregunta ya tiene una respuesta aquí:

Digamos que tengo una lista de personas que necesito ordenar por edad primero y luego por nombre.

Viniendo de un fondo C #, puedo lograr esto fácilmente en dicho lenguaje usando LINQ:

var list=new List<Person>(); list.Add(new Person(25, "Tom")); list.Add(new Person(25, "Dave")); list.Add(new Person(20, "Kate")); list.Add(new Person(20, "Alice")); //will produce: Alice, Kate, Dave, Tom var sortedList=list.OrderBy(person => person.Age).ThenBy(person => person.Name).ToList();

¿Cómo se logra esto usando Kotlin?

Esto es lo que probé (obviamente es incorrecto ya que la salida de la primera cláusula "sortedBy" se anula por la segunda, lo que da como resultado una lista ordenada solo por Nombre)

val sortedList = ArrayList(list.sortedBy { it.age }.sortedBy { it.name })) //wrong


Use sortedWith para ordenar una lista con Comparator .

Luego puede construir un comparador de varias maneras:

  • compareBy , thenBy construya el comparador en una cadena de llamadas:

    list.sortedWith(compareBy<Person> { it.age }.thenBy { it.name }.thenBy { it.address })

  • compareBy tiene una sobrecarga que toma múltiples funciones:

    list.sortedWith(compareBy({ it.age }, { it.name }, { it.address }))


sortedWith + compareBy (tomando un vararg de lambdas) hace el truco:

val sortedList = list.sortedWith(compareBy({ it.age }, { it.name }))

También puede usar la sintaxis de referencia invocable algo más sucinta:

val sortedList = list.sortedWith(compareBy(Person::age, Person::name))