我想将一个可遍历的一次连接到一个可遍历的一次而不解析。这是我提出的隐含解决方案,但我不知道我是否缺少本机解决方案......
object ImplicitTraversableOnce {
implicit def extendTraversableOnce[T](t : TraversableOnce[T]) = new TraversableOnceExtension(t)
}
class TraversableOnceExtension[T <: Any](t : TraversableOnce[T]) {
def ++ (t2:TraversableOnce[T]):TraversableOnce[T] = new concat(t.toIterator, t2.toIterator)
private class concat(i1:Iterator[T], i2:Iterator[T]) extends Iterator[T] {
private var isOnSecond = false
def hasNext:Boolean =
if (isOnSecond) i2.hasNext
else if (!i1.hasNext) {
isOnSecond = true
hasNext
}
else true
def next():T = if (isOnSecond) i2.next() else i1.next()
}
}