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