Scala 迭代器(Iterators)
迭代器
迭代器不是集合,而是一种逐个访问集合元素的方式。 迭代器上的两个基本操作是next和hasNext。 调用it.next()将返回迭代器的下一个元素,并提高迭代器的状态。 您可以使用Iterator的it.hasNext方法查找是否还有其他要返回的元素。“逐步遍历”迭代器返回的所有元素的最直接方法是使用while循环。 让我们遵循以下示例程序。
object Demo {
def main(args: Array[String]) = {
val it = Iterator("a", "number", "of", "words")
while (it.hasNext){
println(it.next())
}
}
}
输出-
a
number
of
words
查找最小和最大值元素
您可以使用it.min和it.max方法从迭代器中找出最小值和最大值的元素。在这里,我们使用ita和itb来执行两个不同的操作,因为迭代器只能被遍历一次。以下是示例程序。
object Demo {
def main(args: Array[String]) = {
val ita = Iterator(20,40,2,50,69, 90)
val itb = Iterator(20,40,2,50,69, 90)
println("Maximum valued element " + ita.max )
println("Minimum valued element " + itb.min )
}
}
输出:
Maximum valued element 90
Minimum valued element 2
查找迭代器的长度
您可以使用it.size或it.length方法来查找迭代器中可用的元素数。在这里,我们使用ita和itb来执行两个不同的操作,因为迭代器只能被遍历一次。以下是示例程序。
object Demo {
def main(args: Array[String]) = {
val ita = Iterator(20,40,2,50,69, 90)
val itb = Iterator(20,40,2,50,69, 90)
println("Value of ita.size : " + ita.size )
println("Value of itb.length : " + itb.length )
}
}
输出:
Value of ita.size : 6
Value of itb.length : 6
Scala 迭代器方法
以下是在使用迭代器时可以使用的重要方法。有关可用方法的完整列表,请查看Scala的参考手册。
方法 | 描述 |
---|---|
def hasNext: Boolean | 测试此迭代器是否可以提供另一个元素。 |
def next(): A | 产生此迭代器的下一个元素。 |
def ++(that: => Iterator[A]): Iterator[A] | 将此迭代器与另一个连接。 |
def ++[B >: A](that :=> GenTraversableOnce[B]): Iterator[B] |
将此迭代器与另一个连接。 |
def addString(b: StringBuilder): StringBuilder | 返回附加了元素的字符串生成器b。 |
def addString(b: StringBuilder, sep: String): StringBuilder | 返回使用分隔符字符串将元素附加到的字符串生成器b。 |
def buffered: BufferedIterator[A] | 从此迭代器创建一个缓冲的迭代器。 |
def contains(elem: Any): Boolean | 测试此迭代器是否包含给定值作为元素。 |
def copyToArray(xs: Array[A], start: Int, len: Int): Unit | 将由此迭代器产生的选定值复制到数组中。 |
def count(p: (A) => Boolean): Int | 计算可遍历或迭代器中满足谓词的元素数。 |
def drop(n: Int): Iterator[A] | 使此迭代器前进到前n个元素或迭代器的长度(以较小者为准)。 |
def dropWhile(p: (A) => Boolean): Iterator[A] | 跳过满足给定谓词p的此迭代器的最长元素序列,并返回其余元素的迭代器。 |
def duplicate: (Iterator[A], Iterator[A]) | 创建两个新的迭代器,它们都在与此迭代器相同的元素上进行迭代(以相同的顺序)。 |
def exists(p: (A) => Boolean): Boolean | 如果给定谓词p保持此迭代器产生的某些值,则返回true,否则返回false。 |
def filter(p: (A) => Boolean): Iterator[A] | 在满足谓词p的所有迭代器元素上返回一个迭代器。元素的顺序被保留。 |
def filterNot(p: (A) => Boolean): Iterator[A] | 在此迭代器的所有不满足谓词p的元素上创建一个迭代器。 |
def find(p: (A) => Boolean): Option[A] | 查找满足谓词(如果有)的迭代器产生的第一个值。 |
def flatMap[B](f: (A) => GenTraversableOnce[B]): Iterator[B] |
通过将函数应用于该迭代器产生的所有值并串联结果来创建新的迭代器。 |
def forall(p: (A) => Boolean): Boolean | 如果给定谓词p对此迭代器产生的所有值均成立,则返回true,否则返回false。 |
def foreach(f: (A) => Unit): Unit | 将函数f应用于此迭代器产生的所有值。 |
def hasDefiniteSize: Boolean | 对于空的Iterators,返回true,否则返回false。 |
def indexOf(elem: B): Int | 返回指定对象在此可迭代对象中首次出现的索引。 |
**def indexWhere(p: (A) => Boolean): Int ** | 返回满足谓词的第一个产生值的索引,即-1。 |
def isEmpty: Boolean | 如果hasNext为false,则返回true,否则为false。 |
def isTraversableAgain: Boolean | 测试此Iterator是否可以重复遍历。 |
def length: Int | 返回此迭代器中的元素数。此方法返回后,迭代器在其末尾。 |
def map[B](f: (A) => B): Iterator[B] |
返回一个新的迭代器,该迭代器通过将函数f应用于该迭代器生成的每个值。 |
def max: A | 查找最大的元素。此方法返回后,迭代器在其末尾。 |
def min: A | 查找最小元素。此方法返回后,迭代器在其末尾。 |
def mkString: String | 在字符串中显示此可遍历或迭代器的所有元素。 |
def mkString(sep: String): String | 使用分隔符字符串在字符串中显示此可遍历或迭代器的所有元素。 |
def nonEmpty: Boolean | 测试可遍历或迭代器是否为空。 |
def padTo(len: Int, elem: A): Iterator[A] | 将元素值附加到此迭代器,直到达到给定的目标长度。 |
def patch(from: Int, patchElems: Iterator[B], replaced: Int): Iterator[B] | 返回带有修补值的迭代器。 |
def product: A | 将这个集合的元素相乘。 |
def sameElements(that: Iterator[_]): Boolean | 如果两个迭代器以相同的顺序产生相同的元素,则返回true,否则返回false。 |
def seq: Iterator[A] | 返回集合的顺序视图。 |
def size: Int | 返回此可遍历或迭代器中的元素数。 |
def slice(from: Int, until: Int): Iterator[A] | 创建一个迭代器,该迭代器返回此迭代器产生的值的间隔。 |
**def sum: A ** | 返回此可遍历或迭代器相对于num中+运算符的所有元素的总和。 |
def take(n: Int): Iterator[A] | 返回仅生成此迭代器的前n个值的迭代器,或者返回整个迭代器(如果生成的值少于n个值)的迭代器。 |
def toArray: Array[A] | 返回包含此可遍历或迭代器的所有元素的数组。 |
def toBuffer: Buffer[B] | 返回包含此可遍历或迭代器的所有元素的缓冲区。 |
def toIterable: Iterable[A] | 返回包含此遍历或迭代器的所有元素的Iterable。对于无限迭代器,这不会终止。 |
def toIterator: Iterator[A] | 返回一个包含此遍历或迭代器所有元素的迭代器。对于无限迭代器,这不会终止。 |
def toList: List[A] | 返回包含此遍历或迭代器的所有元素的列表。 |
def toMap[T, U]: Map[T, U] | 返回包含此遍历或迭代器的所有元素的映射。 |
def toSeq: Seq[A] | 返回一个包含此遍历或迭代器所有元素的序列。 |
def toString(): String | 将此迭代器转换为字符串。 |
def zip[B](that: Iterator[B]): Iterator[(A, B) |
返回一个新的迭代器,该迭代器包含由该迭代器的相应元素组成的对。新迭代器返回的元素数与迭代器返回的最小元素数(A或B)相同。 |