Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何获取地图<;K、 V>;从groupBy而不是Map<;K、 列表<;V>>;?_Kotlin_Collections_Grouping - Fatal编程技术网

Kotlin 如何获取地图<;K、 V>;从groupBy而不是Map<;K、 列表<;V>>;?

Kotlin 如何获取地图<;K、 V>;从groupBy而不是Map<;K、 列表<;V>>;?,kotlin,collections,grouping,Kotlin,Collections,Grouping,groupBy将列表转换为地图: Map<K, List<V>> 我想得到一个映射-相同,但是值被减少到一个值,比如从值列表中获取第一个元素: println(byLength.values) // [a, abc, ab, abcd] 最简单的方法是什么?groupBy可以使用第二个参数提供它吗?或者需要将映射进一步转换为映射?您不需要groupBy,只需编写: words.map { it.length to it }.toMap() 如果与KeySelecto

groupBy将列表转换为地图:

Map<K, List<V>>
我想得到一个映射-相同,但是值被减少到一个值,比如从值列表中获取第一个元素:

println(byLength.values) // [a, abc, ab, abcd]

最简单的方法是什么?groupBy可以使用第二个参数提供它吗?或者需要将映射进一步转换为映射?

您不需要groupBy,只需编写:

words.map { it.length to it }.toMap()

如果与KeySelector匹配的最后一个元素可以是值,则可以从列表中创建映射条目,然后从这些条目创建映射

words.associateBy { it.length }  //[a, def, ab, abcd]
如果需要与选择器匹配的第一个元素,仍然可以使用groupBy

words.groupBy { it.length }.mapValues { it.value.first() }  //[a, abc, ab, abcd]

伟大的toMap是否生成HashMap?LinkedHashMap我记得,您可以签入源代码…但您不应该依赖于该类型;它不能保证,在未来的版本中可能会改变。特别是,如果需要可变映射,应该调用
toMutableMap()
words.groupBy { it.length }.mapValues { it.value.first() }  //[a, abc, ab, abcd]