Перейти к содержанию

🗒 Задача

Скопируй класс из предыдущей задачи и измени его название для избегания конфликтов.

Для того, чтобы взаимодействовать со всеми записями телефонной книги, как с одним целым, их нужно объединить в список.

  • создай и инициализируй (одновременно) список с 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")
}