アイテムがたくさんあるイテレータがあるので、groupByのイテレータに変換できず、すべての結果をメモリに保存したくありません。しかし、すべてのオブジェクトがgroupByフィールドで順序付けられていることを知っているので、ソートされたイテレーターにgroupByを実装することは可能だと思われます...これを行うためのメソッドがscalaコレクションにすでにありますか?
質問する
1397 次
2 に答える
4
私の解決策:
def iterativeGroupBy[T, B](iterO: Iterator[T])(func: T => B): Iterator[List[T]] = new Iterator[List[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
first :: i1.toList
}
}
于 2012-05-17T21:25:17.327 に答える
3
奇妙なことgroupBy
はありませんがIterator
、これはどうですか?
val it = Iterator(1, 2, 3)
new Iterable[Int] { def iterator = it }.groupBy(_ % 2 == 0)
動作しているようです(ただし、で毎回同じイテレータを生成する必要があることを考えると、保証はされませんIterable
)。
于 2012-05-17T22:30:40.727 に答える