Comparar class de datos en Kotlin sin ID

Tengo una class de datos en Kotlin, que tiene varias properties, una de las cuales es ID . Pero cuando realmente uso la function de compare en el código, me gustaría excluir esta propiedad de ID al comparar. ¿Hay alguna manera de hacer eso, excepto la function de compare manual de calcomanías?

Puede usar la function copy() en una de sus instancias de class de datos para crear una copy "alterando algunas de sus properties". p.ej:

 data class User(val id: Long, val name: String) val a = User(1, "John") val b = User(2, "John") println(a == b) // false println(a.copy(id = b.id) == b) // true 

Crear una copy de una de sus instancias de class de datos y alterar el id para que sea igual a la otra instancia con la que desea comparar permite ignorar efectivamente esa propiedad.

También puede copyr ambas instancias de la class de datos y establecer el id con algún valor común, pero si solo hace comparaciones puntuales, esto sería una llamada innecesaria a copy() .

Una class de datos genera la function equals (no se genera la compare ) en function de las properties que se declaran en el constructor primario, por lo que si no quiere comparar las ID, tendrá que mover la propiedad ID fuera del constructor primario .

La parte obvia es que debe mover la propiedad al cuerpo de la class, pero también tendrá que convertirla en var ya que no se inicializará en el constructor principal (no puede ser una val e inicializarlo a un valor pnetworkingeterminado en el bloque init , porque entonces no se puede asignar a él en el constructor secundario).

Un ejemplo de cómo puedes hacer esto:

 data class User(val id: Long, val name: String) data class ModifiedUser(val name: String) { var id: Long = 0 constructor(id: Long, name: String) : this(name) { this.id = id } } val u1 = User(1, "John") val u2 = User(2, "John") println(u1 == u2) // false val m1 = ModifiedUser(1, "Sally") val m2 = ModifiedUser(2, "Sally") println(m1 == m2) // true 

hashCode usted decidir qué manera le conviene más, pero quizás es más fácil anular equals ( y, por hashCode , hashCode ) para get el resultado deseado, al less contiene el código relacionado con esto en un solo lugar, mientras que el anterior La solución puede complicar bastante tu class.

  • El uso de datos de Amazon AWS Cognito `.well-known / jwks.json` falla al decodificar base64 algunos campos
  • La aplicación se bloquea al intentar acceder a otra actividad
  • Cómo fusionar 2 flujos separados, almacenar los datos rellenos y subscribirlos después de un time corto
  • Kotlin, JPA y campos booleans
  • En la dependency injection Kodein, ¿cómo se puede inyectar instancias de Kodein en instancias?
  • java.lang.NoClassDefFoundError en Kotlin
  • Descartar el cuadro de dialog en la tecla Atrás presionada
  • La mejor forma de aplicar una transformación a cada elemento de una list al mismo time en Kotlin
  • Cómo inicializar una var en un lambda
  • kotlin trabaja con Recursos (matriz y parámetro de function)
  • El interruptor del hombre muerto en Kotlin