3

アイテムがたくさんあるイテレータがあるので、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 に答える