Data class в карте в Kotlin
Карта Map связывает ключ и значение - как
в уроке про карты объектов, только значением часто
служит запись data class с несколькими полями.
Литерал mapOf связывает ключ со знаком to
и готовым объектом:
data class User(val name: String, val age: Int)
fun main() {
val byId = mapOf(
1 to User("Ann", 25),
2 to User("Bob", 30),
)
println(byId[1]?.name)
}
Доступ по ключу возвращает nullable-ссылку: если
ключа нет, результат null. Поля записи
читают оператором ?. или после проверки
на null:
data class Config(val host: String, val port: Int)
fun main() {
val env = mapOf("prod" to Config("api.app", 443))
val cfg = env["prod"]
if (cfg != null) {
println(cfg.port)
}
}
Карту можно обойти в цикле: на каждой паре
key и value значение уже имеет
тип data class и печатается или
сравнивается как отдельный объект:
data class Stats(val views: Int, val likes: Int)
fun main() {
val pages = mapOf(
"home" to Stats(100, 4),
"blog" to Stats(50, 2),
)
for ((slug, st) in pages) {
println("$slug ${st.views}")
}
}
Сделайте data class Phone с полями
model и year.
Дана карта:
val stock = mapOf(
"p1" to Phone("X1", 2022),
"p2" to Phone("Y2", 2024),
)
Выведите на экран модель телефона с ключом
"p2" из карты stock.
Сделайте data class Limit с полями
max и used.
Соберите карту из двух ключей "free"
и "pro" с разными лимитами.
Выведите на экран значение used для
тарифа "free".