Scala - Gruppierung auf einem bestellten Iterator träge

Ich habe einIterator[Record] was bestellt wird amrecord.id diesen Weg

record.id=1
record.id=1
...
record.id=1
record.id=2
record.id=2
..
record.id=2

Datensätze einer bestimmten ID können häufig vorkommen. Daher möchte ich eine Funktion schreiben, die diesen Iterator als Eingabe verwendet und ein @ zurückgibIterator[Iterator[Record]] faul ausgeben.

Ich konnte mir folgendes einfallen lassen, aber es schlägt fehl amStackOverflowError nach 500K Datensätzen oder so:

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

Was mache ich falsch

Antworten auf die Frage(4)

Ihre Antwort auf die Frage