例如,我有一个字符串列表:
val list = listOf("a", "b", "c", "d")
我想把它转换成一个映射,其中字符串是键。
我知道我应该使用. tomap()函数,但我不知道如何使用,而且我还没有看到它的任何示例。
例如,我有一个字符串列表:
val list = listOf("a", "b", "c", "d")
我想把它转换成一个映射,其中字符串是键。
我知道我应该使用. tomap()函数,但我不知道如何使用,而且我还没有看到它的任何示例。
当前回答
你有两个选择:
第一个也是性能最好的是使用associateBy函数,它接受两个lambdas来生成键和值,并内联创建映射:
val map = friends.associateBy({it.facebookId}, {it.points})
第二种,性能较差,使用标准map函数创建Pair列表,可由toMap使用该列表生成最终的map:
val map = friends.map { it.facebookId to it.points }.toMap()
其他回答
这在RC版本已经改变了。
我使用val map = list。groupByTo (destinationMap{。facebookId}, {it -> it。点})
你可以使用associate来完成这个任务:
val list = listOf("a", "b", "c", "d")
val m: Map<String, Int> = list.associate { it to it.length }
在本例中,list中的字符串成为键,它们对应的长度(作为示例)成为映射中的值。
在kotlin中将可迭代序列元素转换为映射 associate vs associateBy vs associateWith
*参考:芬兰湾的科特林文档
1-关联(设置键和值):构建一个可以设置键和值元素的映射:
IterableSequenceElements.associate { newKey to newValue } //Output => Map {newKey : newValue ,...}
如果两对中的任何一对具有相同的键,最后一个将被添加到映射中。 返回的映射保留原始数组的条目迭代顺序。
2- associateBy(只是通过计算设置键):建立一个映射,我们可以设置新的键,类似的元素将为值设置
IterableSequenceElements.associateBy { newKey } //Result: => Map {newKey : 'Values will be set from analogous IterableSequenceElements' ,...}
3- associateWith(只是通过计算设置值):建立一个映射,我们可以设置新的值,类似的元素将为键设置
IterableSequenceElements.associateWith { newValue } //Result => Map { 'Keys will be set from analogous IterableSequenceElements' : newValue , ...}
来自Kotlin tips的例子:
如果列表中有不希望丢失的副本,可以使用groupBy完成此操作。
否则,就像其他人说的那样,使用associate/By/With(在重复的情况下,我相信它只会返回该键的最后一个值)。
按年龄分组的一个例子:
class Person(val name: String, val age: Int)
fun main() {
val people = listOf(Person("Sue Helen", 31), Person("JR", 25), Person("Pamela", 31))
val duplicatesKept = people.groupBy { it.age }
val duplicatesLost = people.associateBy({ it.age }, { it })
println(duplicatesKept)
println(duplicatesLost)
}
结果:
{31=[Person@41629346, Person@4eec7777], 25=[Person@3b07d329]}
{31=Person@4eec7777, 25=Person@3b07d329}
你有两个选择:
第一个也是性能最好的是使用associateBy函数,它接受两个lambdas来生成键和值,并内联创建映射:
val map = friends.associateBy({it.facebookId}, {it.points})
第二种,性能较差,使用标准map函数创建Pair列表,可由toMap使用该列表生成最终的map:
val map = friends.map { it.facebookId to it.points }.toMap()