我有很多项目的迭代器,所以我不能将它转换为 iterable for 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 回答