Получить значение с карты в kotlin

#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 для заданного имени (строки).