Объединить список <Keys>и список <Values>в список > - PullRequest
1 голос
/ 14 апреля 2020

У меня есть два списка;

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

Как я могу объединить их в один List<Hashmap<Key,Value>>? как;

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

Ответы [ 2 ]

6 голосов
/ 14 апреля 2020

В идиоматическом выражении c 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) }

(запускаемая демонстрация)

Здесь , hashMapOf(...) принимает пары (Pair<K, V>), и это именно те элементы, которые создает zip.

В качестве альтернативы, вы можете использовать перегрузку zip, которая принимает лямбду и отображает пары без дополнительного вызова на map:

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

(запускаемая демонстрация)

Результатом является список карты, каждая из которых содержит один ключ, сопоставленный со значением.


Другой вариант - создать одну карту, содержащую все пары, которые можно создать следующим образом:

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

(демонстрационная версия)

0 голосов
/ 14 апреля 2020

Я бы так и сделал. Создайте свой собственный класс

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)));
 }
...