Scala Iterator 学习笔记

什么是迭代器?

迭代器是一种访问集合元素的有效方式,而不必暴露集合的底层表示。在Scala中,迭代器是一个trait,可以通过实现 Iterator 接口来创建。

如何创建迭代器?

我们可以使用 iterator 方法来获取集合的迭代器。例如,对于一个列表:

scalaCopy Code
val list = List(1, 2, 3, 4) val iterator = list.iterator

也可以使用 toIterator 方法将一个集合转换为迭代器:

scalaCopy Code
val arr = Array("a", "b", "c") val iterator = arr.toIterator

迭代器的基本操作

访问下一个元素

我们可以使用 next() 方法来访问下一个元素,如果没有更多元素可供遍历,则会抛出 NoSuchElementException 异常。

scalaCopy Code
val it = List(1, 2, 3).iterator println(it.next()) // 1 println(it.next()) // 2 println(it.next()) // 3 println(it.next()) // 抛出 NoSuchElementException 异常

检查是否还有下一个元素

我们可以使用 hasNext() 方法来检查是否还有下一个元素:

scalaCopy Code
val it = List(1, 2, 3).iterator println(it.hasNext) // true println(it.next()) // 1 println(it.hasNext) // true println(it.next()) // 2 println(it.hasNext) // true println(it.next()) // 3 println(it.hasNext) // false

遍历所有元素

我们可以使用 foreach() 方法遍历所有元素:

scalaCopy Code
val it = List(1, 2, 3).iterator it.foreach(println)

输出结果为:

Copy Code
1 2 3

过滤元素

我们可以使用 filter() 方法过滤元素:

scalaCopy Code
val it = List(1, 2, 3, 4, 5).iterator val res = it.filter(_ % 2 == 0).toList println(res) // List(2, 4)

映射元素

我们可以使用 map() 方法映射元素:

scalaCopy Code
val it = List("a", "b", "c").iterator val res = it.map(_.toUpperCase).toList println(res) // List("A", "B", "C")

实例

以下是一个完整的示例,展示了如何使用迭代器来计算所有数字的平均值:

scalaCopy Code
val numbers = List(10, 20, 30) val it = numbers.iterator var sum = 0 while (it.hasNext) { sum += it.next() } val avg = sum / numbers.length.toDouble println(avg) // 20.0

此外,还可以使用 foreach() 方法来计算所有数字的平均值:

scalaCopy Code
val numbers = List(10, 20, 30) var sum = 0 numbers.iterator.foreach(sum += _) val avg = sum / numbers.length.toDouble println(avg) // 20.0

以上就是关于Scala迭代器的基本知识和实例的介绍。