scala中的迭代器

26 阅读3分钟

一、 问题 导入

【教师提问】如果有一个列表的数据是(1,2,3,4,5),请问如何依次输出这5个数?

package iterator
/*
*List(1,2,3,4,5)
*
*/
object lterator01 {
  def main(args: Array[String]): Unit = {
    val list1=scala.collection.immutable.List(1,2,3,4,5)

    list1.foreach(ele => {
      println(ele)
    })

    //跳过list的前面两个元素,而输出随后的两元素
    val it=list1.iterator
    val it1=it.drop(2).take(2)
    while (it1.hasNext){ //3 4
      println(it1.next())
    }

  }


}

【教师提问】如何跳过前面两个元素,只输出3,4?

1. 子迭代器(以 drop 和 take 为例)

package iterator

object Iterator03 {
  /*
   *迭代器 Iterator02
   *专门用来bian 遍历(挨个访问)集合元素。
   * 1.获取。每个集合都有一个迭代器对象。用它来去遍历集合。
   * 2.迭代器。next() 获取当前元素,移动迭代器
   *
   * drop:跳过指定个数的元素drop(3)
   *
   *take:获取指定数量里的元素
   *
   */
  def main(args: Array[String]): Unit = {
    val list1=List(1,2,3,4,5)


    val it=list1.iterator

    val it2=it.take(3)//从当前位置开始,只获取三个元素

    while (it2.hasNext){
      println(it2.next())
    }
    //val it2=it.drop(1)//跳过一个元素
    //while(it2.hasNext){
    //   println(it2.next())
    //  }
    

  }


}

迭代器是一次性的,next之后,就不能再回头

  • duplicate:复制迭代器
package iterator

object Iterator04 {
  /*
   *迭代器 Iterator02
   *专门用来bian 遍历(挨个访问)集合元素。
   * 1.获取。每个集合都有一个迭代器对象。用它来去遍历集合。
   * 2.迭代器。next() 获取当前元素,移动迭代器
   *
   * drop:跳过指定个数的元素drop(3)
   *
   *take:获取指定数量里的元素
   *
   * 迭代器是一次性的,next之后,就不能再回头
   * duplicate:复制迭代器
   *
   */
  def main(args: Array[String]): Unit = {
    val list1=List(1,2,3,4,5)

    val it=list1.iterator

    val (it1,it2) =it.duplicate
    it1.next()//一次性
    it1.next()
    while (it1.hasNext){
      println(it1.next())
    }
    println("--------------")
    while (it2.hasNext){
      println(it2.next())
    }

  }


}

toList 把迭代器中剩余的元素转入一个新的list中。

package iterator

object Iterator05 {
  /*
   *迭代器 Iterator02
   *专门用来bian 遍历(挨个访问)集合元素。
   * 1.获取。每个集合都有一个迭代器对象。用它来去遍历集合。
   * 2.迭代器。next() 获取当前元素,移动迭代器
   *
   * drop:跳过指定个数的元素drop(3)
   *
   *take:获取指定数量里的元素
   *
   * 迭代器是一次性的,next之后,就不能再回头
   * duplicate:复制迭代器
   *
   * toList 把迭代器中剩余的元素转入一个新的list中
   *
   */
  def main(args: Array[String]): Unit = {
    val list1=List(1,2,3,4,5)

    val it=list1.iterator
    it.next()
    it.next()

    println(it.next())
    //希望把剩余的内容,装入一个新的List
    val newList=it.toList
    println(newList)

  }
}
  • zip:两个现在迭代器的元素按照顺序组合成一个新的迭代器。长度不一,会以短的为准
package iterator

object Iterator06 {
  /*
   *迭代器 Iterator02
   *专门用来bian 遍历(挨个访问)集合元素。
   * 1.获取。每个集合都有一个迭代器对象。用它来去遍历集合。
   * 2.迭代器。next() 获取当前元素,移动迭代器
   *
   * drop:跳过指定个数的元素drop(3)
   *
   *take:获取指定数量里的元素
   *
   * 迭代器是一次性的,next之后,就不能再回头
   * duplicate:复制迭代器
   *
   * toList 把迭代器中剩余的元素转入一个新的list中
   *
   * zip:两个现在迭代器的元素按照顺序组合成一个新的迭代器。长度不一,会以短的为准
   *
   */
  def main(args: Array[String]): Unit = {

    val it1=List(1,2,3,4,5,6).iterator
    val it2=List("one","two","three","four","five").iterator

    val it3=it1.zip(it2)

    while (it3.hasNext){
      val pair=it3.next()
      println(pair._1,pair._2)
    }
  }
}