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))