如何把List转换成Map in Kotlin?

例如,我有一个字符串列表,如:

val list = listOf("a", "b", "c", "d") 

我想把它转换成一个映射,其中的字符串是关键。

我知道我应该使用.toMap()函数,但我不知道如何,我没有看到它的任何例子。

你有两个选择:

第一个也是最高性能的是使用associateBy函数,该函数使用两个lambda表达式来生成键和值,并内联创建地图:

 val map = friends.associateBy({it.facebookId}, {it.points}) 

第二toMap能较差的是使用标准的map函数来创建一个Pair对象列表,这个列表对象可以被toMap用来生成最终的地图:

 val map = friends.map { it.facebookId to it.points }.toMap() 

#1。 从Listassociate函数的Map

用Kotlin, List有一个叫做associate的函数。 associate有以下声明:

 fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V> 

返回包含由应用于给定collection的元素的transform函数提供的键值对的Map

用法:

 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 MapassociateBy函数

用Kotlin, List有一个叫做associateBy的函数。 associateBy具有以下声明:

 fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V> 

返回包含由valueTransform提供的值并由应用于给定collection的元素的keySelector函数索引的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} } 

RC版本已经改变了。

我正在使用val map = list.groupByTo(destinationMap, {it.facebookId}, { it -> it.point })