Scala iterator chunking into fixed-size batches
Scala
def chunked[A](items: Iterator[A], size: Int): Iterator[Vector[A]] =
require(size > 0, "chunk size must be positive")
new Iterator[Vector[A]] {
def hasNext: Boolean = items.hasNext
def next(): Vector[A] =
val out = Vector.newBuilder[A]
var taken = 0
while taken < size && items.hasNext do
out += items.next()
taken += 1
out.result()
}
def chunkVector[A](items: Vector[A], size: Int): Vector[Vector[A]] =
chunked(items.iterator, size).toVector