Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

308
Vistas
¿Cómo funciona compareBy en kotlin usando una expresión booleana?

Sé por la documentación oficial que compareBy creates a comparator using the sequence of functions to calculate a result of comparison. The functions are called sequentially, receive the given values a and b and return Comparable objects .

Sé cómo se debe hacer esto para atributos normales como el valor entero aquí, pero ¿cómo maneja compareBy las condiciones booleanas?

En este ejemplo, tenía la intención de mantener los 4 en la parte superior de la lista y luego clasificarlos en orden ascendente de valores, ¡pero no estoy seguro de cómo esta expresión booleana me ayuda a hacer esto!

 fun main(args: Array<String>) { var foo = listOf(2,3,4,1,1,5,23523,4,234,2,2334,2) foo = foo.sortedWith(compareBy({ it != 4 },{ it })) print(foo) }

Producción

 [4, 4, 1, 1, 2, 2, 2, 3, 5, 234, 2334, 23523]
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Boolean es Comparable

 public class Boolean private constructor() : Comparable<Boolean>

Entonces, cuando lo devuelve it != 4 en compareBy , está usando el orden de clasificación de Boolean , es decir, falso <verdadero. Su expresión es falsa solo cuando it == 4 y, de hecho, puede ver los 4 como los primeros elementos en la salida.

over 4 years ago · Santiago Trujillo Denunciar

0

Su código proporciona dos selectores como vararg para compareBy por:

 foo.sortedWith( compareBy( { it != 4 }, { it } ) )

Profundizando en las fuentes, tenemos un Comparator para dos valores a y b construidos: Comparator { a, b -> compareValuesByImpl(a, b, selectors) }

y finalmente:

 private fun <T> compareValuesByImpl(a: T, b: T, selectors: Array<out (T) -> Comparable<*>?>): Int { for (fn in selectors) { val v1 = fn(a) val v2 = fn(b) val diff = compareValues(v1, v2) if (diff != 0) return diff } return 0 }

El último fragmento de código demuestra que si todos los selectores tienen el mismo diff , a y b se consideran iguales; de lo contrario, el primer selector con diff != 0 decide.

Los booleanos son comparables. Al comparar 4 con cualquier otro valor, digamos 2, tendrás:

 4 != 4 false 2 != 4 true diff = false.compareTo( true ) == -1

y así, para ordenar, 4 es "menos" que cualquier valor que no sea 4

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda