0Pricing
Android Academy · Урок

map, filter, forEach

Преобразуйте коллекции с помощью лямбд.

«map, filter, forEach» — бесплатный урок Android Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.

Операции с коллекциями

В коллекциях Kotlin есть мощные встроенные операции. Три операции, которые Вы будете использовать постоянно, — map, filter и forEach.

Они позволяют преобразовывать, отбирать и перебирать данные в одной понятной строке вместо написания циклов вручную.

map преобразует каждый элемент

map создаёт новый список, применяя преобразование к каждому элементу.

Внутри лямбды it обозначает текущий элемент. Исходный список не изменяется.

fun main() {
    val nums = listOf(1, 2, 3)
    val doubled = nums.map { it * 2 }
    println(doubled)
}

map может изменять типы

Результат map не обязан иметь тот же тип, что и входные данные.

Здесь мы преобразуем список имён в список их длин.

fun main() {
    val names = listOf("Ada", "Linus")
    val lengths = names.map { it.length }
    println(lengths)
}

filter оставляет совпадения

filter возвращает новый список, содержащий только те элементы, для которых лямбда возвращает true.

Здесь мы оставляем только чётные числа.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5, 6)
    val evens = nums.filter { it % 2 == 0 }
    println(evens)
}

filter для строк

Условием может быть любое выражение, возвращающее логическое значение. Здесь мы оставляем только длинные слова.

Элементы, не прошедшие проверку, просто не попадают в результат.

fun main() {
    val words = listOf("hi", "hello", "hey", "howdy")
    val long = words.filter { it.length > 3 }
    println(long)
}

forEach выполняет действие

forEach выполняет блок кода для каждого элемента, но не создаёт новый список.

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

fun main() {
    val fruits = listOf("apple", "banana")
    fruits.forEach { println("Fruit: $it") }
}

map и forEach

map возвращает преобразованный список, поэтому используйте его, когда Вам нужен результат.

forEach не возвращает полезного значения, поэтому используйте его только для действий. Правильный выбор делает код понятнее.

Объединение операций

Эти операции возвращают коллекции, поэтому их можно объединять в цепочки.

Читайте слева направо: сначала filter, затем map для оставшихся элементов.

fun main() {
    val nums = listOf(1, 2, 3, 4, 5, 6)
    val result = nums.filter { it % 2 == 0 }.map { it * 10 }
    println(result)
}

Именование параметра

Вместо it можно явно назвать параметр лямбды для большей ясности, особенно при создании цепочек.

Используйте стрелку: { name -> ... }.

fun main() {
    val prices = listOf(10, 25, 5)
    val withTax = prices.map { price -> price + price / 10 }
    println(withTax)
}

forEachIndexed

Если Вам нужна ещё и позиция элемента, используйте forEachIndexed. Он передаёт индекс и элемент.

Так Вам не придётся отслеживать счётчик вручную.

fun main() {
    val tasks = listOf("eat", "code", "rest")
    tasks.forEachIndexed { i, task ->
        println("$i: $task")
    }
}

Объединение для практических задач

Вместе эти операции позволяют просто описывать конвейеры обработки данных. Здесь мы находим суммарную длину длинных имён.

Этот код почти читается как обычный текст.

fun main() {
    val names = listOf("Ada", "Grace", "Bo")
    val total = names.filter { it.length > 2 }.map { it.length }.sum()
    println(total)
}

Быстрая проверка

Проверьте, насколько хорошо Вы понимаете операции с коллекциями.

Итоги

map преобразует каждый элемент в новый список, filter оставляет элементы, соответствующие условию, а forEach выполняет действие для каждого элемента.

Они возвращают коллекции, поэтому объединяйте их в цепочки, чтобы создавать понятные конвейеры обработки данных.

Часто задаваемые вопросы

Урок «map, filter, forEach» бесплатный?

Да — полный текст урока «map, filter, forEach» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.

Чему я научусь в уроке «map, filter, forEach»?

Преобразуйте коллекции с помощью лямбд. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Android Academy?

Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «map, filter, forEach»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Android Academy?

Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Списки и изменяемые списки
  2. Отображения и множества
  3. map, filter, forEach
  4. Лямбды и функции высшего порядка
← Назад к Android Academy