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

Problem

    你须要在你的应用中使用iterator。算法

Solutionthis

    尽管使用带有hasNext()和next()方法的iterator是很是通用的遍历Java集合的方法。可是它们在Scala集合中并不常常被使用。由于Java集合有许多像map和foreach的方法让让你能够轻松地实现本身的算法。必须澄清的是,在Scala中我从未直接使用过以下代码:spa

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

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

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

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
相关文章
相关标签/搜索