Как преобразовать список в карту в Котлине?
например у меня есть список строк типа:
val list = listOf("a", "b", "c", "d")
и я хочу, чтобы преобразовать его в карту, где строки-это ключи.
Я знаю, что я должен использовать .toMap() функция, но я не знаю как, и я не видел никаких примеров этого.
5 ответов:
у вас есть два варианта:
первым и наиболее эффективным является использование
associateBy
функция, которая принимает две лямбды для генерации ключа и значения, а также выравнивает создание карты:val map = friends.associateBy({it.facebookId}, {it.points})
второй, менее производительный, должен использовать стандарт
map
функция для создания спискаPair
который может быть использованtoMap
чтобы создать окончательную карту:val map = friends.map { it.facebookId to it.points }.toMap()
#1. От
List
доMap
Сassociate
функцииС Котлин,
List
имеет функцию под названиемassociate
.associate
есть следующее объявление:fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V>
возвращает a
Map
содержит пары ключ-значение, предоставленныеtransform
функция, применяемая к элементам данной коллекции.использование:
class Person(val name: String, val id: Int) fun main(args: Array<String>) { 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. От
List
доMap
СassociateBy
функцияС Котлин,
List
имеет функцию под названиемassociateBy
.associateBy
есть следующее объявление:fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V>
возвращает a
Map
, содержащим значенияvalueTransform
и индексируетсяkeySelector
функции, применяемые к элементам данной коллекции.использование:
class Person(val name: String, val id: Int) fun main(args: Array<String>) { 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} }
можно использовать
associate
для этой задачи:val list = listOf("a", "b", "c", "d") val m: Map<String, Int> = list.associate { it to it.length }
В этом примере строки
list
становятся ключами, а их соответствующие длины (например) становятся значениями внутри карты.
которые изменились в версии RC.
Я использую
val map = list.groupByTo(destinationMap, {it.facebookId}, { it -> it.point })
например, у вас есть список строк типа:
val list = listOf("a", "b", "c", "d")
и нужно, чтобы преобразовать его в карту, где строки-это ключи.
есть два способа сделать это:
первым и наиболее эффективным является использование функции associateBy, которая принимает две лямбды для генерации ключа и значения, а также выравнивает создание карты:
val map = friends.associateBy({it.facebookId}, {it.points})
второй, менее производительный, заключается в использовании стандартной функции map для создания списка пар, которые могут использоваться toMap, чтобы создать карту:
val map = friends.map { it.facebookId to it.points }.toMap()
источник: https://hype.коды/как конвертировать-список-карта-Котлин