Функция chunked

Функция chunked разбивает исходную коллекцию на части (чанки) указанного размера и возвращает список этих частей. Принимает один обязательный параметр size - размер чанка. Также может принимать необязательный параметр transform - функцию преобразования для каждого чанка. Работает с коллекциями: Array, List, Set, String и другими типами, реализующими интерфейс Iterable. Для Map функция chunked не доступна напрямую, но можно использовать entries.chunked().

Импорт

kotlinimport kotlin.collections.chunked

Синтаксис

kotlin// Базовый синтаксис
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 элемента:

kotlinval numbers = listOf(1, 2, 3, 4, 5, 6, 7)
val res = numbers.chunked(3)
println(res)

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

kotlinList<List<Int>> [[1, 2, 3], [4, 5, 6], [7]]

Пример

Разобьем массив символов на части по 2 элемента:

kotlinval chars = arrayOf('a', 'b', 'c', 'd', 'e')
val res = chars.chunked(2)
println(res)

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

kotlinList<List<Char>> [['a', 'b'], ['c', 'd'], ['e']]

Пример

Разобьем строку на части по 3 символа:

kotlinval text = "abcde"
val res = text.chunked(3)
println(res)

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

kotlinList<String> ["abc", "de"]

Пример

Разобьем Set на части с преобразованием каждого чанка в строку:

kotlinval set = setOf(1, 2, 3, 4, 5)
val res = set.chunked(2) { chunk -> 
  "Chunk: ${chunk.joinToString()}"
}
println(res)

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

kotlinList<String> ["Chunk: 1, 2", "Chunk: 3, 4", "Chunk: 5"]

Пример

Работа с Map через entries:

kotlinval map = mapOf("a" to 1, "b" to 2, "c" to 3, "d" to 4)
val res = map.entries.chunked(2)
println(res)

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

kotlinList<List<Entry<String, Int>>> [[a=1, b=2], [c=3, d=4]]

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

  • функцию windowed,
    которая создает скользящее окно по коллекции
  • функцию partition,
    которая разделяет коллекцию на две части по условию
  • функцию take,
    которая берет первые элементы коллекции
  • функцию drop,
    которая пропускает первые элементы коллекции