Scala - agrupando em um iterador ordenado preguiçosamente
eu tenho umIterator[Record]
que é pedido emrecord.id
deste jeito:
record.id=1
record.id=1
...
record.id=1
record.id=2
record.id=2
..
record.id=2
Os registros de um ID específico podem ocorrer várias vezes, por isso quero escrever uma função que tome esse iterador como entrada e retorne umIterator[Iterator[Record]]
saída de maneira preguiçosa.
Consegui criar o seguinte, mas ele falha noStackOverflowError
após 500K registros ou mais:
def groupByIter[T, B](iterO: Iterator[T])(func: T => B): Iterator[Iterator[T]] = new Iterator[Iterator[T]] {
var iter = iterO
def hasNext = iter.hasNext
def next() = {
val first = iter.next()
val firstValue = func(first)
val (i1, i2) = iter.span(el => func(el) == firstValue)
iter = i2
Iterator(first) ++ i1
}
}
O que estou fazendo errado?