Функция chunked
Функция chunked разбивает исходную коллекцию на части
(чанки) указанного размера и возвращает список этих частей.
Принимает один обязательный параметр size - размер чанка.
Также может принимать необязательный параметр transform -
функцию преобразования для каждого чанка.
Работает с коллекциями: Array, List, Set,
String и другими типами, реализующими интерфейс Iterable.
Для Map функция chunked не доступна напрямую,
но можно использовать entries.chunked().
Импорт
import kotlin.collections.chunked
Синтаксис
// Базовый синтаксис
fun <T> Iterable<T>.chunked(size: Int): List<List<T>>
// С преобразованием
fun <T, R> Iterable<T>.chunked(
size: Int,
transform: (List<T>) -> R
): List<R>
Пример
Разобьем список чисел на части по 3 элемента:
val numbers = listOf(1, 2, 3, 4, 5, 6, 7)
val res = numbers.chunked(3)
println(res)
Результат выполнения кода:
List<List<Int>> [[1, 2, 3], [4, 5, 6], [7]]
Пример
Разобьем массив символов на части по 2 элемента:
val chars = arrayOf('a', 'b', 'c', 'd', 'e')
val res = chars.chunked(2)
println(res)
Результат выполнения кода:
List<List<Char>> [['a', 'b'], ['c', 'd'], ['e']]
Пример
Разобьем строку на части по 3 символа:
val text = "abcde"
val res = text.chunked(3)
println(res)
Результат выполнения кода:
List<String> ["abc", "de"]
Пример
Разобьем Set на части с преобразованием каждого чанка в строку:
val set = setOf(1, 2, 3, 4, 5)
val res = set.chunked(2) { chunk ->
"Chunk: ${chunk.joinToString()}"
}
println(res)
Результат выполнения кода:
List<String> ["Chunk: 1, 2", "Chunk: 3, 4", "Chunk: 5"]
Пример
Работа с Map через entries:
val map = mapOf("a" to 1, "b" to 2, "c" to 3, "d" to 4)
val res = map.entries.chunked(2)
println(res)
Результат выполнения кода:
List<List<Entry<String, Int>>> [[a=1, b=2], [c=3, d=4]]