将 List<Keys> 和 List<Values> 合并到 List<Hashmap<Key,Value>>

Cin*_*com 1 dictionary list kotlin collectors

我有两个清单;

val keys: List<String> = listOf("key1", "key2", "key3"...)
val values: List<String> = listOf("value1", "value2", "value3"...)
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它们合二为一List<Hashmap<Key,Value>>?喜欢;

println(List<Hashmap<Key,Value>>): [[key1 = value1], [key2 = value2], [key3 = value3]...

hot*_*key 6

在惯用的 Kotlin 中,这看起来像这样:

val keys: List<String> = listOf("key1", "key2", "key3")
val values: List<String> = listOf("value1", "value2", "value3")

val result = keys.zip(values).map { hashMapOf(it) }
Run Code Online (Sandbox Code Playgroud)

(可运行的演示)

在这里,hashMapOf(...)接受对 ( Pair<K, V>),这正是zip产生的元素。

或者,您可以使用zip接受 lambda的重载并映射对,而无需额外调用map

val result = keys.zip(values) { k, v -> hashMapOf(k to v) }
Run Code Online (Sandbox Code Playgroud)

(可运行的演示)

结果是一个映射列表,每个映射包含一个映射到值的键。


一个相反的选择是创建一个包含所有对的单一地图,可以按如下方式生成:

val result = HashMap(keys.zip(values).toMap())
Run Code Online (Sandbox Code Playgroud)

(可运行的演示)

  • @Tenfour04 这不是作者问的问题吗?我的意思是,哈希映射列表,每个映射都包含映射到值的单个键。 (2认同)