Como todos sabemos, ordenar una lista es una de las operaciones más comunes realizadas en la lista, por lo que, en este artículo, discutiremos cómo ordenar una lista por el comparador especificado en Kotlin. Cuando tratamos de ordenar una lista de objetos personalizados, necesitamos especificar el comparador. Veamos cómo podemos ordenar una lista por el comparador especificado.
Comparador de Kotlin
Kotlin proporciona una interfaz Comparator para ordenar los objetos de las clases definidas por el usuario. Hay dos formas de crear un objeto Comparator:
- usando compareBy() (y luegoBy() para comparar más campos)
- creando un comparador personalizado
Si desea invertir el orden del Comparador (ordenar por Descendente, por ejemplo), simplemente use reversed().
Lea más aquí: Comparador en Kotlin
Ejemplo
En los siguientes ejemplos, intentaremos clasificar los objetos según ciertas propiedades. Esto nos dará una idea de cómo ordenar según el comparador especificado. Vamos a crear una clase de Persona con propiedad de edad. Ordenaremos una lista de objetos de persona según la edad:
Kotlin
fun main (args: Array<String>){ val p1=Person (91) val p2=Person (10) val p3=Person (78) val listOfPerson= listof (pl, p2, p3) var sortedListOfPerson=listOfPerson.sortedBy { it.age } } class Person (var age: Int)
Para ordenar una lista según el comparador especificado, necesitamos usar la función sortedBy
Kotlin
fun main (args: Array<String>) { val p1=Person (91) val p2=Person (10) val p3=Person (78) val listOfPerson = listOf (pl, p2, p3) var sortedListOfPerson = listOfPerson.sortedBy { it.age } } class Person (var age: Int)
Kotlin también proporciona un método sortedwith, donde puedes especificar tu propia implementación del comparador:
Kotlin
fun main (args: Array<String>){ val pi=Person (91) val p2=Person (10) val p3=Person (78) val listofPerson = listOf (pl, p2, p3) var sortedListOfperson = listofperson .sortedWith <Person> (object : Comparator <Person> { override fun compare (p0: Person, pi: Person) : Int { if (p0.age > pl.age) { return 1 } if (p0.age = pl.age) { return 0 } return -1 } }) } class Person (var age: Int)
La función sortedBy es azúcar sintáctica proporcionada por Kotlin. Internamente, se llama el método sortedWith que toma un comparador. Ahora, veamos la implementación de la función sortBy:
Kotlin
public inline fun <T, R : Comparable<R>> Iterable<T> . sortedBy (crossinline selector: (T) -> R?) : List<T> { return sortedWith (compareBy (selector) ) }
La función sortBy llama al método sortedwith en su interior, que es el siguiente:
Kotlin
public fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>) : List<T> { if (this is Collection) { if (size <= 1) return this.toList () @Suppress ("UNCHECKED_CAST") return (toTypedArray<Any?> () as Array<T>).apply { sortWith (comparator) }.asList () } return toMutableList ().apply { sortWith (comparator) } }
Publicación traducida automáticamente
Artículo escrito por eralokyadav2019 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA