🗒 Задача¶
Скопируй класс из предыдущей задачи и измени его название для избегания конфликтов.
Для того, чтобы взаимодействовать со всеми записями телефонной книги, как с одним целым, их нужно объединить в список.
-
создай и инициализируй (одновременно) список с 5 объектами класса-контакта;
-
2 контакта должны принимать null для поля компании;
-
1 контакт должен иметь название компании “null”;
-
выведи список всех существующих компаний, которые есть в телефонной книге.
❌ Ошибки¶
- выводят вообще компании – предлагать делать фильтрацию с помощью
mapNotNull
✏️ Комментарии¶
По нашему изначальному условию контакт не может существовать без номера телефона и имени. поэтому их нельзя делать нуллябельными
Инициализируя их с разнообразными данными (в том числе и null) надо также учитывать поведение, что при создании объекта придет null. такая ситуация более вероятна
Этот цикл тут не обязателен и даже может оказаться вреден. Ведь по факту ты заменяешь null значение на "[не указано]", твой список после выполнения этого цикла будет другим.
А если предположим, я попрошу тебя отфильтровать все контакты, у которых не указано имя? `contactsList.filter { it.name != null } ` не сработает.
Если ты сделаешь `contactsList.filter { it.name != "[не указано]" } `, это сработает, но тогда код станет плохо поддерживаемым, если например заказчик попросит добавить английский язык, и в одном случае это будет [not set] в другом [не указано].
🧾 Решение¶
class ExtendedDirectoryEntry(
val name: String,
val phoneNumber: Long,
val company: String? = null,
)
fun main() {
val contactsList = listOf(
ExtendedDirectoryEntry("Ростислав", 891234567),
ExtendedDirectoryEntry("Елена", 891111111, "Reddit"),
ExtendedDirectoryEntry("Александр", 8922222222, "null"),
ExtendedDirectoryEntry("Олег", 8933333333),
ExtendedDirectoryEntry("Татьяна", 8944444444, "OpenAI")
)
val companies = contactsList.mapNotNull { it.company }.toSet()
println("Список компаний в телефонной книге: $companies")
}