第十章 Scala 容器基础(十二):使用Iterators

人走茶凉 提交于 2019-12-01 19:44:48

Problem

    你需要在你的应用中使用iterator。

Solution

    尽管使用带有hasNext()和next()方法的iterator是非常通用的遍历Java集合的方法。但是它们在Scala集合中并不经常被使用。因为Java集合有许多像map和foreach的方法让让你可以轻松地实现自己的算法。必须澄清的是,在Scala中我从未直接使用过如下代码:

// don't do this
val it = collection.iterator
while (it.hasNext) ...

    话虽如此,一些时候你还是会用到一个iterator,一个最好的例子就是io.Source.fromFile方法。这个方法返回一个迭代器,这非常好,因为当你在使用非常大的文件的时候,把整个文件读进内存并不是一个好的选择。

    对于iterator,最重要的一点是,当你使用完之后,它就不能用了。你可以使用一个iterator来打印集合中元素,但是你只能用一次,当你再次调用的时候,你会发现,你什么都得不到了。

scala> val it = Iterator(1,2,3)
it: Iterator[Int] = non-empty iterator

scala> it.foreach(println)
1
2
3

scala> it.foreach(println)

    一个iterator不是一个集合;他只是给你一种一个接一个地访问集合元素的方法。但是一个iterator定义了许多集合中才有的方法,包括foreach, map, flatMap, collect等。你也可以吧一个iterator转换称为一个集合。

scala> val it = Iterator(1,2,3)
it: Iterator[Int] = non-empty iterator

scala> it.toArray
res11: Array[Int] = Array(1, 2, 3)

scala> it.to
to              toArray         toBuffer        toIndexedSeq    toIterable      toIterator      toList          
toMap           toSeq           toSet           toStream        toString        toTraversable   toVector
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!