Как разделить список на порции через chunked в Kotlin

Как разделить список на порции через chunked в Kotlin
Содержание статьи

Когда элементы нужно обрабатывать порциями, используйте chunked. Функция разделяет коллекцию на последовательные списки, а последняя порция может быть неполной. В упражнении Mentoring.digital возьмём пять учебных идентификаторов.

Получаем порции нужного размера

val ids = listOf(11, 12, 13, 14, 15)
val batches = ids.chunked(2)

println(batches)
// [[11, 12], [13, 14], [15]]

Размер должен быть положительным. Он может быть больше числа элементов: тогда весь непустой набор окажется в одной порции. Не нужно вручную дополнять последний список, если дальнейшая обработка допускает меньший размер.

Преобразование каждой порции

Перегрузка с transform позволяет сразу получить результат для каждой порции. Например, в небольшом числовом упражнении можно посчитать суммы.

val totals = ids.chunked(2) { batch ->
    batch.sum()
}
println(totals)
// [23, 27, 15]

Список, переданный в transform, является временным и действителен внутри этого вызова. Его нельзя сохранять наружу без снимка. Если нужно передать сами элементы дальше и сохранить контейнер, создайте копию через toList() внутри преобразования.

Как выбрать обработку для рабочей задачи

Само разбиение не делает операции параллельными и не задаёт транзакции, повторные попытки или ограничения внешнего API. Сначала определите, как обрабатывать ошибку одной порции и допустима ли повторная обработка её элементов.

Для упражнения проверьте пустой список, ровное деление и неполную последнюю порцию. Если исходные элементы изменяемые, не считайте копирование списка глубокой копией каждого объекта.

Коллекции можно освоить на курсах Kotlin. Выбрать размер порции и поведение при ошибках поможет ментор по Kotlin.

Похожие статьи по данной теме