En este tutorial estudiaremos el uso de la función associate
en Kotlin a fin de construir un mapa a partir de una colección de datos e indicando una función lambda de transformación.
Función associate()
La función de extensión associate()
retorna un mapa de pares clave-valor que son producidos por una función de transformación. Dicha función usa como cuerpo instancias de la clase Pair<K, V>
que son consumidas para producir los pares.
// Sintaxis de associate() en arrays
inline fun <T, K, V> Array<out T>.associate(
transform: (T) -> Pair<K, V>
): Map<K, V>
// Sintaxis de associate() en iterables
inline fun <T, K, V> Iterable<T>.associate(
transform: (T) -> Pair<K, V>
): Map<K, V>
Aspectos a destacar de associate()
:
- En el caso de que existan valores producidos con la misma clave, se agrega al resultado final el último par
- El orden de los elementos de la colección original es conservado en el mapa
- El rendimiento puede verse afectado por el consumo de objetos
Pair
en la transformación, así que úsala si este no es tu prioridad o si es la forma más efectiva de llegar a tu objetivo.
Considera la siguiente ilustración, donde se muestra un arreglo A = [a, b, c, d]
y se aplica la función associate()
con el fin de generar un mapa.
La función de transformación produce claves con los caracteres y valores con su código entero multiplicado por dos.
La representación de este ejemplo en Kotlin se aplica en las siguientes sentencias:
fun main() {
val letters = charArrayOf('a', 'b', 'c', 'd')
val lettersAndCodesx2 = letters.associate { it to it.toInt() * 2 }
println(lettersAndCodesx2)
}
Salida:
{a=194, b=196, c=198, d=200}
La función lambda de transformación pasada en associate()
muestra que los pares producidos usan como clave la referencia it
y como valor a la conversión entera de it
por 2
.
Recuerda que la función infix to()
produce el mismo resultado que el constructor Pair(it, it.toInt() * 2)
.