Scala Iterators函数详解

首页 / Scala入门教程 / Scala Iterators函数详解

迭代器不是集合,而是一种逐个访问集合元素的方式, 迭代器上的两个基本操作是 next 和 hasNext 。调用 it.next()将返回迭代器的下一个元素,并提高迭代器的状态,您可以使用Iterator的 it.hasNext 方法来查找是否还有其他要返回的元素。

object Demo {
   def main(args: Array[String]) {
      val it=Iterator("a", "number", "of", "words")
      
      while (it.hasNext){
         println(it.next())
      }
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
a
number
of
words

查找最小/最大值

您可以使用 it.min 和 it.max 方法从迭代器中找出最小和最大值的元素。

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 )
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
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 )
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
Value of ita.size : 6
Value of itb.length : 6

Scala迭代器方法

以下是在使用Iterator玩游戏时可以使用的重要方法。有关可用方法的完整列表,请查看Scala的官方文档。

Sr.NoMethods with 描述
1

def hasNext:Boolean

测试此迭代器是否可以提供另一个元素。

2

def next():A

产生此迭代器的下一个元素。

3

def ++(that: => Iterator[A]): Iterator[A]

将此迭代器与另一个连接。

4

def ++[B >: A](that :=> GenTraversableOnce[B]): Iterator[B]

将此迭代器与另一个连接。

5

def addString(b:StringBuilder):StringBuilder

返回附加了元素的字符串生成器b。

6

def addString(b:StringBuilder,sep:String):StringBuilder

返回使用分隔符字符串附加了元素的字符串生成器b。

7

def buffered:BufferedIterator [A]

从此迭代器创建一个缓冲的迭代器。

8

def contains(elem:Any):Boolean

测试此迭代器是否包含给定值作为元素。

9

def copyToArray(xs:Array [A],开始:Int,len:Int):Unit

将由此迭代器产生的选定值复制到数组中。

10

def count(p: (A) => Boolean): Int

计算可遍历或迭代器中满足断言的元素数。

11

def drop(n:Int):Iterator[A]

使此迭代器前进到前n个元素或迭代器的长度(以较小者为准)。

12

def dropWhile(p: (A) => Boolean): Iterator[A]

跳过满足给定断言p的此迭代器的最长元素序列,并返回其余元素的迭代器。

13

def duplicate:(Iterator[A],Iterator[A])

创建两个新的迭代器,它们都在与此迭代器相同的元素上进行迭代(以相同的顺序)。

14

def exists(p: (A) => Boolean): Boolean

如果给定断言p保持此迭代器产生的某些值,则返回true,否则返回false。

15

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

在满足断言p的所有迭代器元素上返回一个迭代器。元素的顺序被保留。

16

def filterNot(p: (A) => Boolean): Iterator[A]

在此迭代器的所有不满足断言p的元素上创建一个迭代器。

17

def find(p: (A) => Boolean): Option[A]

查找满足断言的迭代器产生的第一个值(如果有)。

18

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

通过将函数应用于该迭代器产生的所有值并串联输出来创建新的迭代器。

19

def forall(p: (A) => Boolean): Boolean

如果给定断言p对此迭代器产生的所有值均成立,则返回true,否则返回false。

20

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

将函数f应用于此迭代器产生的所有值。

21

def hasDefiniteSize:Boolean

对于空的迭代器,返回true,否则返回false。

22

def indexOf(elem:B):Int

返回指定对象在此可迭代对象中首次出现的索引。

23

def indexWhere(p: (A) => Boolean): Int

返回满足断言的第一个产生值的索引,即-1。

24

def isEmpty:Boolean

如果hasNext为false,则返回true,否则为false。

25

def isTraversableAgain:Boolean

测试此Iterator是否可以重复遍历。

26

def length:Int

返回此迭代器中的元素数。此方法返回后,迭代器在其末尾。

27

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

返回一个新的迭代器,该迭代器通过将函数f应用于该迭代器生成的每个值。

28

def max:A

查找最大的元素。此方法返回后,迭代器在其末尾。

29

def min:A

查找最小元素。此方法返回后,迭代器在其末尾。

30

def mkString:String

在字符串中显示此可遍历或迭代器的所有元素。

31

def mkString(sep:String):String

使用分隔符字符串在字符串中显示此可遍历或迭代器的所有元素。

32

def nonEmpty:Boolean

测试可遍历或迭代器是否为空。

33

def padTo(len:Int,elem:A):Iterator[A]

将元素值附加到此迭代器,直到达到给定的目标长度。

无涯教程网

34

def patch(from:Int,patchElems:Iterator [B],replace:Int):Iterator [B]

返回带有迭代值的迭代器。

35

def product:A

将这个集合的元素相乘。

36

def sameElements(that:Iterator [_]):Boolean

如果两个迭代器以相同的顺序产生相同的元素,则返回true,否则返回false。

37

def seq:Itertor[A]

返回集合的顺序视图。

38

def size:Int

返回此可遍历或迭代器中的元素数。

39

def slice(from:Int,until:Int):Iterator[A]

创建一个迭代器,该迭代器返回此迭代器产生的值的间隔。

40

def sum:A

返回此可遍历或迭代器相对于num中+运算符的所有元素的总和。

41

def take(n:Int):Iterator[A]

返回仅生成此迭代器前n个值的迭代器,如果生成的迭代器少于n个值,则返回整个迭代器。

42

def toArray:Array[A]

返回包含此可遍历或迭代器的所有元素的数组。

43

def toBuffer:Buffer[B]

返回一个包含此遍历或迭代器所有元素的缓冲区。

44

def toIterable:Iterator[A]

返回包含此遍历或迭代器的所有元素的Iterable。对于无限迭代器,这不会终止。

45

def toIterator:Iterator[A]

返回一个包含此遍历或迭代器所有元素的迭代器。对于无限迭代器,这不会终止。

46

def toList:List[A]

返回包含此遍历或迭代器的所有元素的列表。

47

def toMap [T,U]:Map [T,U]

返回包含此遍历或迭代器的所有元素的映射。

48

def toSeq:Seq [A]

返回一个包含此遍历或迭代器的所有元素的序列。

49

def toString():String

将此迭代器转换为字符串。

50

def zip [B](that:Iterator [B]):Iterator [(A,B)

返回一个新的迭代器,该迭代器包含由该迭代器的相应元素组成的对。新迭代器返回的元素数与迭代器返回的最小元素数(A或B)相同。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

技术与商业案例解读 -〔徐飞〕

Flutter核心技术与实战 -〔陈航〕

后端技术面试 38 讲 -〔李智慧〕

Kafka核心源码解读 -〔胡夕〕

互联网人的英语私教课 -〔陈亦峰〕

Flink核心技术与实战 -〔张利兵〕

手把手带你写一门编程语言 -〔宫文学〕

深入C语言和程序运行原理 -〔于航〕

手把手带你写一个 MiniTomcat -〔郭屹〕

好记忆不如烂笔头。留下您的足迹吧 :)