如何从 groupBy 获取 Map<K, V> 而不是 Map<K, List<V>>?
How get Map<K, V> from groupBy instead of Map<K, List<V>>?
groupBy 将列表转换为地图:
Map<K, List<V>>
以这样的方式:
val words = listOf("a", "abc", "ab", "def", "abcd")
val byLength = words.groupBy { it.length }
println(byLength.keys) // [1, 3, 2, 4]
println(byLength.values) // [[a], [abc, def], [ab], [abcd]]
我想要一个 Map - 相同,但值减少为单个值,比方说从值列表中获取第一个元素:
println(byLength.values) // [a, abc, ab, abcd]
最简单的获取方式是什么? groupBy 可以使用第二个参数提供吗?或者需要将 Map 进一步转换为 Map?
你不需要groupBy,你可以简单地写:
words.map { it.length to it }.toMap()
您正在从列表创建地图条目,然后从这些条目创建地图
如果最后一个匹配你的keySselector的元素可以是值
words.associateBy { it.length } //[a, def, ab, abcd]
如果您想要第一个与您的选择器匹配的元素,您仍然可以使用 groupBy
words.groupBy { it.length }.mapValues { it.value.first() } //[a, abc, ab, abcd]
groupBy 将列表转换为地图:
Map<K, List<V>>
以这样的方式:
val words = listOf("a", "abc", "ab", "def", "abcd")
val byLength = words.groupBy { it.length }
println(byLength.keys) // [1, 3, 2, 4]
println(byLength.values) // [[a], [abc, def], [ab], [abcd]]
我想要一个 Map
println(byLength.values) // [a, abc, ab, abcd]
最简单的获取方式是什么? groupBy 可以使用第二个参数提供吗?或者需要将 Map
你不需要groupBy,你可以简单地写:
words.map { it.length to it }.toMap()
您正在从列表创建地图条目,然后从这些条目创建地图
如果最后一个匹配你的keySselector的元素可以是值
words.associateBy { it.length } //[a, def, ab, abcd]
如果您想要第一个与您的选择器匹配的元素,您仍然可以使用 groupBy
words.groupBy { it.length }.mapValues { it.value.first() } //[a, abc, ab, abcd]