diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/collection/TraversableOnce.scala | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/library/scala/collection/TraversableOnce.scala b/src/library/scala/collection/TraversableOnce.scala index 90f1583c58..84fe4bdf4c 100644 --- a/src/library/scala/collection/TraversableOnce.scala +++ b/src/library/scala/collection/TraversableOnce.scala @@ -346,7 +346,12 @@ object TraversableOnce { } class FlattenOps[A](travs: TraversableOnce[TraversableOnce[A]]) { - def flatten: Iterator[A] = travs.foldLeft(Iterator.empty: Iterator[A])(_ ++ _) + def flatten: Iterator[A] = new Iterator[A] { + val its = travs.toIterator + private var it: Iterator[A] = Iterator.empty + def hasNext: Boolean = it.hasNext || its.hasNext && { it = its.next.toIterator; hasNext } + def next(): A = if (hasNext) it.next() else Iterator.empty.next() + } } class MonadOps[+A](trav: TraversableOnce[A]) { |