【问题标题】:Merge List<Keys> and List<Values> into List<Hashmap<Key,Value>>将 List<Keys> 和 List<Values> 合并到 List<Hashmap<Key,Value>>
【发布时间】:2020-07-27 06:08:24
【问题描述】:

我有两个列表;

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

如何将它们合并为一个List&lt;Hashmap&lt;Key,Value&gt;&gt;?喜欢;

println(List&lt;Hashmap&lt;Key,Value&gt;&gt;): [[key1 = value1], [key2 = value2], [key3 = value3]...

【问题讨论】:

标签: list dictionary kotlin collectors


【解决方案1】:

在惯用的 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) }

(runnable demo)

这里,hashMapOf(...) 接受对 (Pair&lt;K, V&gt;),而这正是 zip 产生的元素。

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

val result = keys.zip(values) { k, v -> hashMapOf(k to v) }

(runnable demo)

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


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

val result = HashMap(keys.zip(values).toMap())

(runnable demo)

【讨论】:

  • @Tenfour04 这不是作者问的问题吗?哈希映射列表,我的意思是,每个映射都包含一个映射到值的键。
  • @hotkey 最好包含keys.zip(values).toMap() 以说明单个地图是可能的。
  • @Adam,感谢您的建议!我已经更新了答案。
【解决方案2】:

我会这样做。 创建自己的类

class MyMap{
   String key;
   String value;
}

然后

 List<MyMap> newList = new ArrayList<>();
for (int i=0;i<keys.size();i++){
      newList.add(new MyMap(keys.get(i),values.get(i)));
 }

【讨论】:

  • 这个问题是用 Kotlin 写的,你的答案是用 Java 写的。
  • 标记为 java,所以我认为可能会有所帮助,它只是语法。不管怎样,谢谢@Adm 的指点。
猜你喜欢
  • 2011-05-19
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
相关资源
最近更新 更多