Scala中是否存在groupBy的迭代版本?

时间:2012-05-17 19:32:56

标签: scala scala-collections

我有很多项目的迭代器,所以我不能将它转换为Iterable for groupBy并且不想将所有结果都存储在memmory中。 但是我知道所有对象都是由groupBy字段排序的,因此似乎可以为已排序的迭代器实现groupBy ... scala集合中是否已经有一些方法来执行此操作?

2 个答案:

答案 0 :(得分: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
    }
  }

答案 1 :(得分:3)

奇怪groupBy不在Iterator,但是这个怎么样?

val it = Iterator(1, 2, 3)
new Iterable[Int] { def iterator = it }.groupBy(_ % 2 == 0)

它似乎有效(虽然它并不能保证,因为每次 应该每次使用Iterable生成相同的迭代器)。