迭代器

48 阅读2分钟

迭代器 iterator

有很多元素,提供统一方式访问这些元素。

1. 获取迭代器。

2. hasNext判断是否结束。

3. next获取当前元素,并移动迭代器。

package iterator

object iterator01 {
  def main(args: Array[String]): Unit = {
    val list=List(1,2,3,4,5)
    //如何依次输出这5个元素
    list.foreach(ele => println(ele))
    //如何只输出3,4
    // 1. 获取迭代器
    val it =list.iterator.drop(2).take(2)
    // 2. 使用while循环,hasNext判断有没有下一个元素?
    while (it.hasNext){
      println(it.next())// next() 获取当前元素,并向后移动一次迭代器
    }
  }
}

1. next(): 获取当前迭代器,移动一位迭代器

2. hasNext(): 判断是否有下一个元素

3. drop(n): 从当前位置开始,跳过n个元素,它返回一个新的迭代器

4. take(n): 从当前位置开始,获取n个元素,它返回一个新的迭代器

5·duplicate 复制迭代器

package iterator

object iterator02 {

    // 1. next(): 获取当前迭代器,移动一位迭代器
    // 2. hasNext(): 判断是否有下一个元素
    // 3. drop(n): 从当前位置开始,跳过n个元素,它返回一个新的迭代器
    // 4. take(n): 从当前位置开始,获取n个元素,它返回一个新的迭代器
    // 5·duplicate 复制迭代器
    def main(args: Array[String]): Unit = {
      // 创建一个迭代器
      val it = List(1,2,3 ,4,5,6,7,8,9,10).iterator
     // println(it.next()) // 1
      //println(it.next()) // 2
      //(it.next()) // 3
      //println(it.next()) // 4
     // println(it.next()) // NoSuchElementException: head of empty list

     // val it1 = it.drop(2).take(1)
      //while(it1.hasNext){
//println(it1.next()) // 3,
    //  }
      val(it1,it2)=it.duplicate
      val it3 =it1.take(3)
      while (it3.hasNext){
        println(it3.next())
      }
      println("----------------------")
      while (it2.hasNext){
        print(it2.next())
      }
    }



}

6·toList():将迭代器转换为列表

7·zip():将两个迭代器的元素按顺序配对为元组

package iterator
//6·toList():将迭代器转换为列表
//7·zip():将两个迭代器的元素按顺序配对为元组

object iterator03 {

      def main(args: Array[String]): Unit = {
        // 创建迭代器并遍历
        val it = List(1,2,3,4,5).iterator
        it.next()  // 访问第一个元素
        it.next()  // 访问第二个元素
        val list = it.toList  // 转换为列表
        println(list)  // 输出:List(3, 4, 5)

        // zip()示例:两个迭代器配对
        val it1 = List(1,2,3,4,5).iterator
        val it2 = List("one", "two", "three", "four", "five").iterator
        val it3 = it1.zip(it2)
        while(it3.hasNext) {
          val rs = it3.next()
          println(rs._1, rs._2)  // 输出配对结果
        }
      }

    }