Назад к вопросам
Junior
101
questionbank

Какие функции для работы с коллекциями предоставляет язык Kotlin?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

1. Фильтрация:

  • filter/filterNot: Возвращает список элементов, соответствующих/не соответствующих предикату.
  • filterNotNull: Возвращает список всех ненулевых элементов.
  • filterIsInstance<T>: Возвращает список всех элементов, являющихся экземплярами типа T.

2. Преобразование (Mapping):

  • map/mapIndexed: Преобразует каждый элемент коллекции в новый элемент. mapIndexed также получает индекс элемента.
  • mapNotNull/mapIndexedNotNull: Преобразует каждый элемент, отбрасывая null.
  • flatMap: Преобразует каждый элемент в коллекцию и объединяет их в одну плоскую коллекцию.
  • zip: Создает коллекцию пар из элементов двух коллекций с одинаковыми индексами.

3. Агрегация (Reducing):

  • reduce/fold: Применяет операцию к последовательным элементам коллекции, накапливая результат. fold принимает начальное значение.
  • sum, average, count, max, min: Базовые агрегирующие функции.

4. Упорядочивание:

  • sorted/sortedDescending: Возвращает отсортированную коллекцию.
  • sortedBy/sortedByDescending: Возвращает отсортированную коллекцию по результату применения функции-селектора.
  • reversed: Возвращает список в обратном порядке.
  • shuffled: Возвращает перемешанный список.

5. Получение элементов:

  • first/firstOrNull: Возвращает первый элемент.
  • last/lastOrNull: Возвращает последний элемент.
  • find/findLast: Возвращает первый/последний элемент, соответствующий предикату.
  • elementAt/elementAtOrNull/elementAtOrElse: Возвращает элемент по индексу.
  • single/singleOrNull: Возвращает единственный элемент, если он есть.

6. Проверка условий:

  • all/any: Проверяет, соответствуют ли все/хотя бы один элемент предикату.
  • none: Проверяет, не соответствует ли ни один элемент предикату.
  • contains: Проверяет наличие элемента.

7. Группировка:

  • groupBy: Группирует элементы по ключу, определяемому функцией-селектором.

8. Разделение:

  • partition: Разделяет коллекцию на две части: элементы, соответствующие предикату, и те, которые не соответствуют.
  • chunked: Разбивает коллекцию на части заданного размера.

9. Сравнение коллекций:

  • equals: Сравнивает содержимое двух коллекций.
  • containsAll: Проверяет, содержит ли коллекция все элементы другой коллекции.

10. Множественные операции:

  • intersect: Возвращает общие элементы двух коллекций.
  • subtract: Возвращает элементы первой коллекции, отсутствующие во второй.
  • union: Возвращает все уникальные элементы из обеих коллекций.

Примеры использования:

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)

    // Фильтрация
    val evenNumbers = numbers.filter { it % 2 == 0 } // [2, 4, 6]

    // Преобразование
    val squaredNumbers = numbers.map { it * it } // [1, 4, 9, 16, 25, 36]

    // Агрегация
    val sumOfNumbers = numbers.sum() // 21

    // Группировка
    val names = listOf("Alice", "Bob", "Charlie", "David")
    val groupedByNameLength = names.groupBy { it.length }
    // {5=[Alice, Charlie], 3=[Bob], 4=[David]}
}