Функция 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]