#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, вместо этого я попробую сделать это таким образом. Это определенно имеет больше смысла!