3

我有很多项目的迭代器,所以我不能将它转换为 iterable for groupBy 并且不想将所有结果都存储在内存中。但我知道所有对象都是按 groupBy 字段排序的,所以似乎可以为排序的迭代器实现 groupBy ...... scala 集合中是否已经有一些方法可以做到这一点?

4

2 回答 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 回答