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:
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))