(Gen
) TraversableOnce.toIterator
переопределяется в TraversableLike
как toStream.iterator
, вызывая появление промежуточного потока.
В качестве простого примера, скажем, я пытаюсь реализовать простой *Утилита 1007 *, которая всегда приводит свои аргументы к итераторам перед вызовом zip
, чтобы получить эффективный итератор для обеих коллекций.
Следующее неэффективно (из-за промежуточного потока):
def izip[A,B](xs: TraversableOnce[A], ys: TraversableOnce[B]) =
xs.toIterator zip ys.toIterator
и должен быть расширен до:
def izip[A,B](xs: Iterable[A], ys: Iterable[B]) =
xs.iterator zip ys.iterator
def izip[A,B](xs: Iterator[A], ys: Iterable[B]) =
xs zip ys.iterator
def izip[A,B](xs: Iterable[A], ys: Iterator[B]) =
xs.iterator zip ys
def izip[A,B](xs: Iterator[A], ys: Iterator[B]) =
xs zip ys
// .. and more needed to handle Traversables as well
Есть ли лучший способ?