介绍
Iterator(迭代器)不是一个集合,它是一种用于 访问集合 的方法。
每一类集合都提供了一个迭代器(iterator)用来迭代访问集合
重要方法
it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
it.hasNext() 用于检测集合中是否还有元素。
创建迭代器
直接创建
val it=Iterator("李雷",1.82,70,true)
由集合转换(较多)
val it=List("李雷","韩梅梅","lili","lucy").iterator
遍历
while
object It {
def main(args: Array[String]): Unit = {
val it=Iterator("李雷",1.82,70,true)
while(it.hasNext){
println(it.next())
}
}
}
for
val it=List("李雷","韩梅梅","lili","lucy").iterator
for(item <- it){
println(item)
}
注意
遍历一次迭代器后,如果调用 next()
会报错
val it=List("李雷","韩梅梅","lili","lucy").iterator
while(it.hasNext){
println(it.next())
}
println(it.next())
}
报错如下:
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 后的结果生成新的迭代器。
def map[B](f: (A) => B): Iterator[B]
参数:
- 函数
f()
,返回一个元素
例子:
val it=List(1,2,3,4).iterator
val it2=it.map(_ * 2)
while(it2.hasNext){
println(it2.next())
}
flatMap
针对迭代器的序列中的每个元素应用函数f,并返回指向结果序列的迭代器。
def flatMap[B](f: (A) => GenTraversableOnce[B]): Iterator[B]
参数:
- 函数
f()
,返回一个迭代器(也可以是集合)
例子:
val it=List("李雷 lili","韩梅梅 lucy").iterator
val it2=it.flatMap(_.split(" "))
while(it2.hasNext){
println(it2.next())
}
与 map()
区别:
val it=List("李雷 lili","韩梅梅 lucy").iterator
val it2=it.map(_.split(" "))
while(it2.hasNext){
println(it2.next())
}
foreach
在迭代器返回的每个元素上执行指定的程序 f
def foreach(f: (A) => Unit): Unit
参数:
- 函数
f()
不需要返回值
例子:
val it=List("李雷 lili","韩梅梅 lucy").iterator
val it2=it.foreach(println)
filter
返回一个新迭代器 ,指向迭代器元素中所有满足条件p的元素。
def filter(p: (A) => Boolean): Iterator[A]
例子:
val it=List("李雷","韩梅梅","lili","lucy").iterator
//迭代器中的元素,其首字母是l
val it2=it.filter(_.take(1)=="l")
while(it2.hasNext){
println(it2.next())
}
take
返回前 n 个元素的新迭代器
def take(n: Int): Iterator[A]
val it=List("李雷","韩梅梅","lili","lucy").iterator
val it2=it.take(2)
it2.foreach(println)