dictionary - reales - libro de android studio en español pdf
¿Cómo convertir la lista al mapa en Kotlin? (5)
# 1
De la
List
al
Map
con función
associate
Con Kotlin 1.3,
List
tiene una función llamada
associate
.
associate
tiene la siguiente declaración:
fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V>
Devuelve un
Map
contiene pares clave-valor proporcionados por la función detransform
aplicada a elementos de la colección dada.
Uso:
class Person(val name: String, val id: Int)
fun main() {
val friends = listOf(Person("Sue Helen", 1), Person("JR", 2), Person("Pamela", 3))
val map = friends.associate({ Pair(it.id, it.name) })
//val map = friends.associate({ it.id to it.name }) // also works
println(map) // prints: {1=Sue Helen, 2=JR, 3=Pamela}
}
# 2
De la
List
al
Map
con la función associaBy
Con Kotlin,
List
tiene una función llamada
associate
.
associateBy
tiene la siguiente declaración:
fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V>
Devuelve un
Map
contiene los valores proporcionados porvalueTransform
e indexados porkeySelector
funcioneskeySelector
aplicadas a elementos de la colección dada.
Uso:
class Person(val name: String, val id: Int)
fun main() {
val friends = listOf(Person("Sue Helen", 1), Person("JR", 2), Person("Pamela", 3))
val map = friends.associateBy(keySelector = { person -> person.id }, valueTransform = { person -> person.name })
//val map = friends.associateBy({ it.id }, { it.name }) // also works
println(map) // prints: {1=Sue Helen, 2=JR, 3=Pamela}
}
Por ejemplo, tengo una lista de cadenas como:
val list = listOf("a", "b", "c", "d")
y quiero convertirlo en un mapa, donde las cadenas son las claves.
Sé que debería usar la función
.toMap()
, pero no sé cómo, y no he visto ningún ejemplo de ello.
Eso ha cambiado en la versión RC.
Estoy usando
val map = list.groupByTo(destinationMap, {it.facebookId}, { it -> it.point })
Por ejemplo, tiene una lista de cadenas como:
val list = listOf("a", "b", "c", "d")
y necesitas convertirlo en un mapa, donde las cadenas son las claves.
Hay dos maneras de hacer esto:
La primera y más eficaz es usar la función associaBy que toma dos lambdas para generar la clave y el valor, y alinea la creación del mapa:
val map = friends.associateBy({it.facebookId}, {it.points})
El segundo, menos eficaz, es usar la función de mapa estándar para crear una lista de pares que toMap puede usar para generar el mapa final:
val map = friends.map { it.facebookId to it.points }.toMap()
Puede usar
associate
para esta tarea:
val list = listOf("a", "b", "c", "d")
val m: Map<String, Int> = list.associate { it to it.length }
En este ejemplo, las cadenas de la
list
convierten en las claves y sus longitudes correspondientes (como ejemplo) se convierten en los valores dentro del mapa.
Tienes dos opciones:
La primera y más eficaz es usar la función associaBy que toma dos lambdas para generar la clave y el valor, y alinea la creación del mapa:
val map = friends.associateBy({it.facebookId}, {it.points})
El segundo, menos eficaz, es usar la función de
map
estándar para crear una lista de
Pair
que
toMap
puede usar para generar el mapa final:
val map = friends.map { it.facebookId to it.points }.toMap()