为什么在迭代器上执行映射不会导致它被修改?
Why does performing a map on an iterator not cause it to be modified?
> val textIt = text.split("\s").iterator
> val upperIt = textIt.map(_.toUpperCase)
> textIt
res14: Iterator[String] = non-empty iterator
为什么textIt
不是空的?由于 map
迭代它们,我希望它成为一个空迭代器。引擎盖下到底发生了什么?
方法Iterator.map
returns新建Iterator
对象而不遍历它:
def map[B](f: A => B): Iterator[B] = new AbstractIterator[B] {
def hasNext = self.hasNext
def next() = f(self.next())
}
在迭代 upperIt
时执行迭代 textIt
。
> val textIt = text.split("\s").iterator
> val upperIt = textIt.map(_.toUpperCase)
> textIt
res14: Iterator[String] = non-empty iterator
为什么textIt
不是空的?由于 map
迭代它们,我希望它成为一个空迭代器。引擎盖下到底发生了什么?
方法Iterator.map
returns新建Iterator
对象而不遍历它:
def map[B](f: A => B): Iterator[B] = new AbstractIterator[B] {
def hasNext = self.hasNext
def next() = f(self.next())
}
在迭代 upperIt
时执行迭代 textIt
。