0Pricing
Kotlin Academy · Урок

filter, map и find для коллекций

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

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

Три основные функции

Фильтрация сохраняет элементы, соответствующие предикату. Преобразование изменяет каждый элемент. Поиск возвращает первый подходящий элемент (или null). Вместе они охватывают большую часть задач обработки коллекций.

Основы фильтрации

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

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

Основы преобразования

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

fun main() {
    val nums = listOf(1, 2, 3)
    val squares = nums.map { it * it }
    println(squares) // [1, 4, 9]
}

Основы поиска

find возвращает первый элемент, соответствующий предикату, или null, если совпадений нет.

fun main() {
    val words = listOf("apple", "banana", "cherry")
    val match = words.find { it.startsWith("b") }
    println(match) // banana
}

Объединение фильтрации и преобразования

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

fun main() {
    val nums = listOf(1, 2, 3, 4, 5)
    val result = nums.filter { it % 2 == 1 }.map { it * 10 }
    println(result) // [10, 30, 50]
}

Фильтрация экземпляров классов данных

Функции фильтрации и преобразования особенно полезны при работе с коллекциями экземпляров классов данных.

data class User(val name: String, val age: Int)
fun main() {
    val users = listOf(User("Ana", 17), User("Ben", 25), User("Cal", 31))
    val adultNames = users.filter { it.age >= 18 }.map { it.name }
    println(adultNames) // [Ben, Cal]
}

Сравнение find и first

find возвращает допускающее значение null; first { ... } вызывает исключение, если совпадений нет. Используйте find для необязательных совпадений.

fun main() {
    val nums = listOf(1, 2, 3)
    println(nums.find { it > 10 })  // null
    // nums.first { it > 10 }       // throws NoSuchElementException
    println(nums.firstOrNull { it > 10 }) // null (alias of find)
}

filterNot и filterNotNull

filterNot инвертирует предикат. filterNotNull удаляет элементы со значением null из списка элементов, допускающих null.

fun main() {
    val nums = listOf(1, 2, 3, 4)
    println(nums.filterNot { it % 2 == 0 }) // [1, 3]
    val maybe: List<String?> = listOf("a", null, "b", null, "c")
    println(maybe.filterNotNull()) // [a, b, c]
}

mapNotNull

mapNotNull сначала преобразует элементы, а затем удаляет значения null — это удобно при разборе данных.

fun main() {
    val raw = listOf("1", "two", "3", "four")
    val numbers = raw.mapNotNull { it.toIntOrNull() }
    println(numbers) // [1, 3]
}

Практический конвейер

Небольшой пример, объединяющий фильтрацию, преобразование и итоговое свёртывание.

data class Product(val name: String, val price: Double, val inStock: Boolean)
fun main() {
    val products = listOf(
        Product("Pen", 1.0, true),
        Product("Book", 12.0, false),
        Product("Lamp", 25.0, true)
    )
    val total = products
        .filter { it.inStock }
        .map { it.price }
        .sum()
    println("Available total: $total") // 26.0
}

Выбор между операциями

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

fun main() {
    val words = listOf("alpha", "beta", "gamma", "delta")
    println(words.filter { it.length == 5 })       // [alpha, gamma, delta]
    println(words.map { it.uppercase() })           // [ALPHA, BETA, GAMMA, DELTA]
    println(words.find { it.endsWith("ta") })       // beta
}

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

Какая функция возвращает новую коллекцию, в которой элементы преобразованы лямбдой?

Итоги

Фильтрация выбирает элементы, преобразование изменяет их, а поиск находит первое совпадение (или null). Свободно объединяйте их в конвейеры; используйте mapNotNull и filterNotNull при работе с необязательными значениями.

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

Урок «filter, map и find для коллекций» бесплатный?

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

Чему я научусь в уроке «filter, map и find для коллекций»?

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

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

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

Сколько времени занимает урок «filter, map и find для коллекций»?

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

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

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

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

  1. Что такое лямбда? Синтаксис и типы
  2. Передача лямбд функциям
  3. it: неявный параметр
  4. filter, map и find для коллекций
← Назад к Kotlin Academy