Kotlin 如何获取地图<;K、 V>;从groupBy而不是Map<;K、 列表<;V>>;?
groupBy将列表转换为地图: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
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]