我想将一个可遍历的一次连接到一个可遍历的一次而不解决任何一个。
这是我作为隐式提出的解决方案,但我不知道我是否缺少 native 解决方案......
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()
}
}
最佳答案
您可以使用++ 加入迭代器。所以如果你无论如何都要使用迭代器,只要
def ++(t2: TraversableOnce[T]): TraversableOnce[T] = t.toIterator ++ t2.toIterator
不这样做的原因是为不是
foreach
/Traversable
的 Iterable
提供一个高效的 Iterator
,但是你需要填写所有的 TraversableOnce
抽象方法。关于scala - 在 Scala 中连接 TraversableOnce 对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13072700/