scala中的迭代器

94 阅读2分钟

1.迭代器的定义

  • 迭代器是一种用于遍历集合元素的对象。它提供了统一的方式来访问各种集合类 型(如列表、映射、集合等)中的元素,而不需要了解集合的内部结构

  • 在 Scala 中,迭代器是一种抽象的概念,它有特定的接口和方法来实现元素的遍历

2.迭代器的基本使用

第一步:构建一个迭代器

第二步:循环获取元素

object iterator01 {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3, 4, 5)
    // 如何依次输出这个5个元素?
    list.foreach(ele => println(ele))

    // 问:如何只输出:3,4
    val it = list.iterator.drop(2).take(2)
    while(it.hasNext){
      println(it.next())
    }
  }
}

3.迭代器的常用方法

  1. next() 获取当前的元素,移动一次迭代

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

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

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

  5. duplicate 复制迭代器

  6. toList 把迭代器中的元素放在一个新的List中

  7. zip 将两个迭代器合并成新的迭代器,可以同步移动这两个迭代器,并且以元组的形式

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

    val (it1,it2) = it.duplicate

    //使用it1访问前三个
    val it3 = it1.take(3)
    while(it3.hasNext){
      print(it3.next())
    }

    println("------------------------")

    while(it2.hasNext){
      println(it2.next())
    }


  }
}
object iterator03 {
  /**
   * 1. next() 获取当前的元素,移动一次迭代
   * 2. hasNext 判断是否有下一个元素
   * 3. drop(n) 从当前位置开始,跳过n个元素,它返回一个新的迭代器
   * 4. take(n) 从当前位置开始,获取n个元素,它返回一个新的迭代器
   * 5. duplicate 复制迭代器
   * 6. toList 把迭代器中的元素放在一个新的List中
   * 7. zip 将两个迭代器合并成新的迭代器,可以同步移动这两个迭代器,并且以元组的形式
   */
  def main(args: Array[String]): Unit = {
    val it = List(1,2,3,4,5).iterator

    // it.next()
    // it.next()

    val list1 = it.toList
    println(list1)


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

    val its = it1.zip(it2)

    while(its.hasNext){
      val rs = its.next()
      println(rs._1, rs._2)
    }
  }
}

4.迭代器的优点

1.内存效率高

2.统一的遍历方法

3.支持函数式编程风格,便于链式操作