¿Cómo puedo eliminar objects duplicates con distinctBy de una list en Kotlin?

¿Cómo puedo usar distinctBy en una list de objects personalizados para quitar los duplicates? Quiero determinar la "singularidad" por múltiples properties del object, pero no todas.

Esperaba que algo así funcionara, pero no tuve suerte:

val uniqueObjects = myObjectList.distinctBy { it.myField, it.myOtherField }

Editar: Tengo curiosidad sobre cómo usar distinctBy con cualquier cantidad de properties, no solo dos como en mi ejemplo anterior.

Puedes crear un par:

 myObjectList.distinctBy { Pair(it.myField, it.myOtherField) } 

El distinctBy usará igualdad de Pair para determinar la unicidad.

Si observa la implementación de distinctBy , simplemente agrega el valor que pasa en el lambda a un Set . Y si el Set aún no contiene el elemento especificado, agrega el elemento respectivo de la List original a la nueva List y esa nueva List se devuelve como resultado de distinctBy .

 public inline fun <T, K> Iterable<T>.distinctBy(selector: (T) -> K): List<T> { val set = HashSet<K>() val list = ArrayList<T>() for (e in this) { val key = selector(e) if (set.add(key)) list.add(e) } return list } 

De modo que puede pasar un object compuesto que contiene las properties que necesita para encontrar la singularidad.

 data class Selector(val property1: String, val property2: String, ...) 

Y pase ese object Selector dentro de la lambda:

 myObjectList.distinctBy { Selector(it.property1, it.property2, ...) } 
  • Controle los enlaces caducados mientras analiza JSON desde la aplicación de Android
  • ¿Cómo get Kotlin AST?
  • Kotlin Propiedad Genérica
  • Advertencia de Kotlin: el resultado de la twig condicional del tipo ... es el molde de implicidad de Any?
  • ¿Por qué mi trabajo no está comenzando?
  • Cómo organizar los methods de extensión de Kotlin
  • @StringRes, @DrawableRes, @LayoutRes y demás annotations de android lint check con los parameters de kotlin
  • Campos de extensión en Kotlin
  • nullPointerException en shanetworkingpreferences class auxiliar Al ejecutar una testing
  • String.intern () devuelve diferentes valores en un controller JDBC
  • Cómo implementar un reciclador de carga perezosa. Adaptador de vista como el reciclador de reino. Ver el adaptador usando kotlin.