Хэш-карта внутри списка Kotlin (Android)

#android #firebase #kotlin

#Android #firebase #kotlin

Вопрос:

Я пытаюсь представить хэш-карту внутри списка в Kotlin. Список структурирован как:

 daysOfWeekHashMapOptions = listOf(
    hashMapOf("key" to 0, "label" to "Monday"),
    hashMapOf("key" to 1, "label" to "Tuesday"),
    hashMapOf("key" to 2, "label" to "Wednesday"),
    hashMapOf("key" to 3, "label" to "Thursday"),
    hashMapOf("key" to 4, "label" to "Friday"),
    hashMapOf("key" to 5, "label" to "Saturday"),
    hashMapOf("key" to 6, "label" to "Sunday")
)
  

Таким образом, он настроен таким образом, что моя Firebase Firestore хранит выбранные дни недели в списке, подобном:

 daysOfWeek [
    0: {
        key: 0
        label: "Monday"
    },
    1: ...
]
  

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу создать автозаполняемый текст в моем приложении для Android, чтобы я мог выбирать эти значения и отображать их соответствующим образом. Поэтому я хочу, чтобы ArrayAdapter AutoCompleteText получал каждый label параметр в качестве опции для выбора. Сохраненные значения из выбранных параметров автозаполнения текста (HashMap) затем будут сохранены в виде списка / массива. Однако, имея возможность «фильтровать» и разделять список опций и HashMap, сложно.

В JavaScript это было бы что-то вроде daysOfWeekHashMapOptions.filter(value => value.label) (возможно). Любая помощь или указания на эквивалент в Kotlin приветствуются, спасибо!

Ответ №1:

Вы можете использовать map :

 labels = daysOfWeekHashMapOptions.map{ it.get("label") }
  

Тип значения labels является List<String> .

Комментарии:

1. Потрясающе! Спасибо! В качестве дополнительного вопроса. Теперь, если у меня есть ChipGroup (с чипами), в которых хранятся дни, выбранные из автозаполняемого текста. Как бы мне найти значение хэш-карты из daysOfWeekHashMapOptions , которое соответствует текстовому значению (метке) каждого чипа? Еще раз спасибо 🙂

2. Вы хотите получить «ключ» в соответствии с «меткой»?

3. Спасибо за ваш ответ @Tugqay Либо так, либо получите фактическое значение из daysOfWeekHashMapOptions . Например, я перебираю список дочерних элементов в ChipGroup. Затем я хочу найти все элементы, в daysOfWeekHashMapOptions которых есть label одинаковый текст чипа

4. Что вы подразумеваете под фактическим значением? И каков тип данных ChipGroup?

5. Привет @Tuqay. Извините за формулировку. Я разработал это как: daysOfWeekHashMapOptions.filter {it["label"] == chip.text.toString()} . Это возвращает список, содержащий значения хэш-карты дней недели, соответствующие тексту чипа.

Ответ №2:

Это к вашему второму вопросу:

 val map = HashMap<Int,String>()
map.put(0,"Monday")
map.put(1,"Tuesday")
map.put(2,"Wednesday")
map.put(3,"Thursday")
map.put(4,"Friday")
map.put(5,"Saturday")
map.put(6,"Sunday")
  

Ваша база данных будет выглядеть следующим образом:

 daysOfWeek [
    0: "Monday"
    1: "Tuesday"
    ...........
    6: "Sunday"
]
  

Если вы не планируете хранить что-либо, кроме просто дней недели, то это лучший способ.

Комментарии:

1. Спасибо @Tuqay, вместо этого я попробую сделать это таким образом. Это определенно имеет больше смысла!