scala教程:迭代器Iterator

介绍

Iterator(迭代器)不是一个集合,它是一种用于 访问集合 的方法。

每一类集合都提供了一个迭代器(iterator)用来迭代访问集合

重要方法

  • it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。

  • it.hasNext() 用于检测集合中是否还有元素。

创建迭代器

直接创建

  1. val it=Iterator("李雷",1.82,70,true)

由集合转换(较多)

  1. val it=List("李雷","韩梅梅","lili","lucy").iterator

遍历

while

  1. object It {
  2. def main(args: Array[String]): Unit = {
  3. val it=Iterator("李雷",1.82,70,true)
  4. while(it.hasNext){
  5. println(it.next())
  6. }
  7. }
  8. }

for

  1. val it=List("李雷","韩梅梅","lili","lucy").iterator
  2. for(item <- it){
  3. println(item)
  4. }

注意

遍历一次迭代器后,如果调用 next() 会报错

  1. val it=List("李雷","韩梅梅","lili","lucy").iterator
  2. while(it.hasNext){
  3. println(it.next())
  4. }
  5. println(it.next())
  6. }

报错如下:

  1. java.util.NoSuchElementException: next on empty iterator

常用方法

更多参见:
https://www.runoob.com/scala/scala-iterators.html

  • def length: Int 返回迭代器元素的数量。

  • def max: A 返回迭代器迭代器元素中最大的元素

  • def min: A 返回迭代器迭代器元素中最小的元素

  • def contains(elem: Any): Boolean:判断迭代器中是否包含指定元素

  • def toArray: Array[A] 将迭代器指向的所有元素归入数组并返回

  • def toList: List[A] 把迭代器的所有元素归入列表并返回

  • def toMap[T, U]: Map[T, U] 将迭代器的所有键值对归入一个Map并返回。

  • def toSeq: Seq[A] 将代器的所有元素归入一个Seq容器并返回。

  • def toString(): String 将迭代器转换为字符串

map

将 it 中的每个元素传入函数 f 后的结果生成新的迭代器。

  1. def map[B](f: (A) => B): Iterator[B]

参数:

  • 函数 f(),返回一个元素

例子:

  1. val it=List(1,2,3,4).iterator
  2. val it2=it.map(_ * 2)
  3. while(it2.hasNext){
  4. println(it2.next())
  5. }

flatMap

针对迭代器的序列中的每个元素应用函数f,并返回指向结果序列的迭代器。

  1. def flatMap[B](f: (A) => GenTraversableOnce[B]): Iterator[B]

参数:

  • 函数 f(),返回一个迭代器(也可以是集合)

例子:

  1. val it=List("李雷 lili","韩梅梅 lucy").iterator
  2. val it2=it.flatMap(_.split(" "))
  3. while(it2.hasNext){
  4. println(it2.next())
  5. }

map()区别:

  1. val it=List("李雷 lili","韩梅梅 lucy").iterator
  2. val it2=it.map(_.split(" "))
  3. while(it2.hasNext){
  4. println(it2.next())
  5. }

foreach

在迭代器返回的每个元素上执行指定的程序 f

  1. def foreach(f: (A) => Unit): Unit

参数:

  • 函数 f() 不需要返回值

例子:

  1. val it=List("李雷 lili","韩梅梅 lucy").iterator
  2. val it2=it.foreach(println)

filter

返回一个新迭代器 ,指向迭代器元素中所有满足条件p的元素。

  1. def filter(p: (A) => Boolean): Iterator[A]

例子:

  1. val it=List("李雷","韩梅梅","lili","lucy").iterator
  2. //迭代器中的元素,其首字母是l
  3. val it2=it.filter(_.take(1)=="l")
  4. while(it2.hasNext){
  5. println(it2.next())
  6. }

take

返回前 n 个元素的新迭代器

  1. def take(n: Int): Iterator[A]
  1. val it=List("李雷","韩梅梅","lili","lucy").iterator
  2. val it2=it.take(2)
  3. it2.foreach(println)

原文出处:https://malaoshi.top/show_1IX1JdMreXyE.html