Ordenar una lista por comparador especificado en Kotlin

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *