当前位置: 首页 > article >正文

Scala中的迭代器

1.对比foreach

它的优点在于:

(1) 内存效率高。迭代器采用延迟计算的方式,它不会将整个集合加载到内存中,而是在每次调用next方法时才计算并返回下一个元素。

(2) 统一的遍历方法。迭代器为不同类型的集合(如列表、集合、映射等)提供了一种统一的遍历方式。无论底层集合的具体结构如何,只要能获取到迭代器,就可以使用相同的hasNext和next方法来遍历元素。

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

2. duplicate方法

功能:复制迭代器。返回一对迭代器,它们可以独立遍历原始迭代器中的元素序列。

语法:(迭代器1,迭代器2) = 迭代器.duplicate()

3. toList 方法

toList 方法将迭代器中的剩余元素转换为一个列表。

4.drop和take方法


drop 会跳过指定数量的元素,返回一个新的迭代器
take 只处理当前开始的,指定数量的元素,返回一个新的迭代器

5. zip方法

zip方法用于将两个迭代器的元素按顺序组合成一个新的迭代器,其中每个元素是一个包含两个迭代器对应位置元素的元组。如果两个迭代器的长度不同,zip操作会在较短的迭代器耗尽时停止。
 

object test28_2 {
  def main(args: Array[String]): Unit = {
//    var li1 = List(1, 2, 3 , 4 , 5 , 6)
//    val it1 = li1.iterator
    //常用方法
//    println(it1.next())//作用:获取当前元素 + 移动迭代器
//    println(it1.next())//作用:获取当前元素 + 移动迭代器
//    println(it1.next())//作用:获取当前元素 + 移动迭代器
//
//    println(it1.hasNext)
//
//    //2.复制迭代器
//    val (it2,it3) = it1.duplicate
//
//    while(it2.hasNext){
//      println(it2.next())
//    }
//
//    while(it3.hasNext){
//      println(it3.next())
//    }

//    //3.toList 把剩余的元素转成列表
//    it1.next()//移动一次迭代器
//    it1.next()//移动一次迭代器
//    val l2 = it1.toList//把剩余的元素转成列表
//    println(l2)

    //4.
    // drop 会跳过指定数量的元素,返回一个新的迭代器
    // take 只处理当前开始的,指定数量的元素,返回一个新的迭代器

//   val it2 = it1.drop(3)
//    val it3 = it1.take(3)
//    while (it3.hasNext){
//      println(it3.next())
//    }
    //只输出3,4,5要怎么做?
//    val it5 = it1.drop(2).take(3)
//    while (it5.hasNext){
//      println(it5.next())
//    }

    //5.zip拉链
//    val it1 = List("1","2","3").iterator
//    val it2 = List("one","two","three","four").iterator
//
//    val it3 = it1.zip(it2)
//    while (it3.hasNext){
//      val rs = it3.next()
//      println(rs._1,"-->",rs._2)
//    }
  }
}


http://www.kler.cn/a/397885.html

相关文章:

  • Three.js PBR材质
  • JavaEE 重要的API阅读
  • git创建远程仓库,以gitee码云为例GitHub同理
  • 电子电气架构 --- 传统刷写流程怎么用在SOC上就不适用呢?
  • C#界面设计
  • Spring Boot 启动时自动配置 RabbitMQ 交换机、队列和绑定关系
  • 如何找出爬取网站的来源IP呢?
  • 对接阿里云实人认证
  • UG Motion学习笔记
  • 【AI图像生成网站Golang】JWT认证与令牌桶算法
  • 在 Linux 系统上部署 Oracle 数据库涉及多个步骤
  • AI技术如何助力电商平台提升销售效率与用户体验?——创新应用、挑战与未来发展趋势
  • 【代码随想录回溯算法|子集问题】
  • 排序算法(基础)大全
  • 网络工程实验四:NAT的配置
  • 【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)
  • 【基于轻量型架构的WEB开发】课程 13.2.4 拦截器 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis
  • 机器学习:XGBoost模型(升级版)——高效且强大的树形模型
  • 安全见闻4
  • 《C语言程序设计现代方法》note-5 数组
  • 【开源免费】基于SpringBoot+Vue.JS卫生健康系统(JAVA毕业设计)
  • 【C++】OGRE:面向对象图形渲染库配置与示例
  • 2024山西省网络建设运维第十八届职业院校技能大赛解析答案(5. nginx 和 tomcat 服务)
  • 模型压缩相关技术概念澄清(量化/剪枝/知识蒸馏)
  • Pyhon基础数据结构(列表)【蓝桥杯】
  • 永磁同步电机负载估计--降阶龙贝格观测器