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?

questionAnswers(2)

yourAnswerToTheQuestion