[英]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
Why is textIt
not empty? 为什么
textIt
不为空? I would expect it to become an empty iterator due to map
iterating over them. 我希望由于
map
迭代它们而成为空迭代器。 What is actually happening under the hood? 实际情况是什么?
Method Iterator.map
returns new Iterator
object without traversing over it: 方法
Iterator.map
返回新的Iterator
对象,而不遍历该对象:
def map[B](f: A => B): Iterator[B] = new AbstractIterator[B] {
def hasNext = self.hasNext
def next() = f(self.next())
}
Iterating over textIt
is performed when you iterate over upperIt
. 对
textIt
进行迭代是在对textIt
进行迭代时upperIt
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.