#android #kotlin
#Android #kotlin
Вопрос:
У меня есть класс :
Category(val name : String? = null, val products: Map<Product,Boolean> = mutableMapOf())
и этот класс используется в действии на карте:
private var categoriesAndProducts = mutableMapOf<Category, Boolean>()
И моя проблема в том, что когда у меня есть имя категории, мне нужно зайти внутрь класса Category, а затем наружу, чтобы получить логическое значение категории. Проблема в том, что я не знаю, как получить это логическое значение, когда я внутри. Например, как вернуться выше в этой иерархии и получить это значение.
Комментарии:
1. Наличие этого логического значения в качестве параметра в классе Category не является вариантом?
Ответ №1:
Если я правильно вас понял, вы хотите найти Category
внутри categoriesAndProducts
на основе Category.name
. Имея это Category
(которое является ключом), вы затем хотите получить его Boolean
значение categoriesAndProducts
.
Вы можете сделать это, сначала отфильтровав ключи, соответствующие названию категории:
val key: Category? = categoriesAndProducts.keys.firstOrNull {
it.name == "someName"
}
categoriesAndProducts[key] // returns null when key is null
Вы могли бы написать функцию расширения, которая поможет вам получить доступ к ключу категории на основе имени:
fun Map<Category, Boolean>.findByName(name: String): Boolean? {
val key: Category? = keys.firstOrNull { it.name == name }
return get(key)
}
categoriesAndProducts.findByName("someName") // returns boolean
Комментарии:
1. На самом деле я хочу получить логическое значение из этой первой карты: mutableMapOf<Category, Boolean>() , но единственное, что я знаю, это имя, которое находится внутри класса Category, как вы написали Category.name
2. Я понял. Я немного обновил свой ответ. Это дает вам значение (логическое) из
categoriesAndProducts
для заданного имени (строки).