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

🗒 Задача

В разрабатываемом приложении мы реализуем список элементов. Изначально он представлен списком строк. При помощи map преобразуй его в список лямбд, каждая из которых печатает в консоль: “Нажат элемент [название_элемента]”.

“Нажми” каждый четный элемент списка.

❌ Ошибки

✏️ Комментарии

Так лучше, но у данного решения есть недостаток. Каждый вызов `indexOf()` приводит к обходу всех элементов listOfLambda, чтобы найти индекс искомого.
Ты преобразуешь список в строк в список других строк. А нужно на выходе получить список лямбд.
Да, все верно! Ты можешь передавать лямбды как параметры функций, хранить их в переменных и списках.

🧾 Решение

fun main() {

    val items = listOf("Элемент 1", "Элемент 2", "Элемент 3", "Элемент 4")

    val actions = items.map { str: String ->
        { println("Нажат элемент $str") }
    }

    actions.forEachIndexed { index, action ->
        if ((index + 1) % 2 == 0) {
            action.invoke() // или просто action()
        }
    }
}