> val textIt = text.split("\\s").iterator
> val upperIt = textIt.map(_.toUpperCase)
> textIt
res14: Iterator[String] = non-empty iterator
为什么textIt
不为空?由于map
迭代它们,我希望它成为一个空的迭代器。引擎盖下究竟发生了什么?
答案 0 :(得分:2)
方法Iterator.map
返回新的Iterator
对象而不遍历它:
def map[B](f: A => B): Iterator[B] = new AbstractIterator[B] {
def hasNext = self.hasNext
def next() = f(self.next())
}
在迭代textIt
时执行upperIt
的迭代。