АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP, Python или фреймворки. Сегодня последний день для записи! Жми!
405 of 1310 menu
Бесплатный тренинг по PHP: форматирование строк. Начало 25 сентября. Жми для записи!

Функция partition

Функция partition разделяет исходную коллекцию на две новые коллекции по заданному предикату (условию). Элементы, для которых предикат возвращает true, попадают в первую коллекцию, а элементы, для которых предикат возвращает false, попадают во вторую коллекцию. Функция возвращает пару Pair из двух коллекций.

Синтаксис

// Для Iterable<T> inline fun <T> Iterable<T>.partition( predicate: (T) -> Boolean ): Pair<List<T>, List<T>>
// Для Array<T> inline fun <T> Array<T>.partition( predicate: (T) -> Boolean ): Pair<List<T>, List<T>>
// Для List<T> inline fun <T> List<T>.partition( predicate: (T) -> Boolean ): Pair<List<T>, List<T>>
// Для Set<T> inline fun <T> Set<T>.partition( predicate: (T) -> Boolean ): Pair<List<T>, List<T>>

Для каких типов коллекций работает

Функция partition доступна для следующих типов коллекций:

  • Array - массивы
  • List - списки
  • Set - множества
  • Iterable - любые итерируемые коллекции
  • Sequence - последовательности

Для Map функция partition недоступна напрямую, но можно использовать entries.partition().

Пример

Разделим массив чисел на четные и нечетные:

val numbers = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val (even, odd) = numbers.partition { it % 2 == 0 } println("Even numbers: $even") println("Odd numbers: $odd")

Результат выполнения кода:

Even numbers: [2, 4, 6, 8, 10] Odd numbers: [1, 3, 5, 7, 9]

Пример

Разделим список строк на короткие (длина ≤ 3) и длинные:

val words = listOf("a", "ab", "abc", "abcd", "abcde") val (short, long) = words.partition { it.length <= 3 } println("Short words: $short") println("Long words: $long")

Результат выполнения кода:

Short words: [a, ab, abc] Long words: [abcd, abcde]

Пример

Разделим множество чисел на положительные и неположительные:

val numbersSet = setOf(-5, -3, 0, 2, 4, 6) val (positive, nonPositive) = numbersSet.partition { it > 0 } println("Positive: $positive") println("Non-positive: $nonPositive")

Результат выполнения кода:

Positive: [2, 4, 6] Non-positive: [-5, -3, 0]

Пример

Использование partition с Map через entries:

val map = mapOf("a" to 1, "b" to 2, "c" to 3, "d" to 4) val (evenEntries, oddEntries) = map.entries.partition { it.value % 2 == 0 } println("Even entries: $evenEntries") println("Odd entries: $oddEntries")

Результат выполнения кода:

Even entries: [b=2, d=4] Odd entries: [a=1, c=3]

Смотрите также

  • функцию filter,
    которая фильтрует элементы по условию
  • функцию takeWhile,
    которая берет элементы, пока выполняется условие
  • функцию dropWhile,
    которая пропускает элементы, пока выполняется условие
  • функцию groupBy,
    которая группирует элементы по ключу