Batch a Kotlin iterable into fixed-size lists
Kotlin
fun <T> Iterable<T>.batched(size: Int): List<List<T>> {
require(size > 0) { "size must be positive, was $size" }
val result = mutableListOf<List<T>>()
var current = ArrayList<T>(size)
for (item in this) {
current.add(item)
if (current.size == size) {
result.add(current)
current = ArrayList(size)
}
}
if (current.isNotEmpty()) result.add(current)
return result
}
check((1..7).batched(3).map { it.size } == listOf(3, 3, 1))