Scala Iterator 学习笔记
什么是迭代器?
迭代器是一种访问集合元素的有效方式,而不必暴露集合的底层表示。在Scala中,迭代器是一个trait,可以通过实现 Iterator
接口来创建。
如何创建迭代器?
我们可以使用 iterator
方法来获取集合的迭代器。例如,对于一个列表:
scalaCopy Codeval list = List(1, 2, 3, 4)
val iterator = list.iterator
也可以使用 toIterator
方法将一个集合转换为迭代器:
scalaCopy Codeval arr = Array("a", "b", "c")
val iterator = arr.toIterator
迭代器的基本操作
访问下一个元素
我们可以使用 next()
方法来访问下一个元素,如果没有更多元素可供遍历,则会抛出 NoSuchElementException
异常。
scalaCopy Codeval it = List(1, 2, 3).iterator
println(it.next()) // 1
println(it.next()) // 2
println(it.next()) // 3
println(it.next()) // 抛出 NoSuchElementException 异常
检查是否还有下一个元素
我们可以使用 hasNext()
方法来检查是否还有下一个元素:
scalaCopy Codeval 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 Codeval it = List(1, 2, 3).iterator
it.foreach(println)
输出结果为:
Copy Code1 2 3
过滤元素
我们可以使用 filter()
方法过滤元素:
scalaCopy Codeval it = List(1, 2, 3, 4, 5).iterator
val res = it.filter(_ % 2 == 0).toList
println(res) // List(2, 4)
映射元素
我们可以使用 map()
方法映射元素:
scalaCopy Codeval it = List("a", "b", "c").iterator
val res = it.map(_.toUpperCase).toList
println(res) // List("A", "B", "C")
实例
以下是一个完整的示例,展示了如何使用迭代器来计算所有数字的平均值:
scalaCopy Codeval 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 Codeval numbers = List(10, 20, 30)
var sum = 0
numbers.iterator.foreach(sum += _)
val avg = sum / numbers.length.toDouble
println(avg) // 20.0
以上就是关于Scala迭代器的基本知识和实例的介绍。