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

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操作会在较短的迭代器耗尽时停止。

//package test28
// 迭代器
//object test28_2 {
//  def main(args: Array[String]): Unit = {
//    var li1 = List(1, 2, 3, 4, 5, 6)
//    val it1 = li1.iterator
//     1.常用方法 next
//    println(it1.next()) // 作用:获取当前元素 + 移动迭代器
//    println(it1.next()) // 作用:获取当前元素 + 移动迭代器
//    println(it1.next()) // 作用:获取当前元素 + 移动迭代器
//
//    println(it1.hasNext)
//
//     2.复制迭代器 duplicate
//    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.lryc.cn/news/484269.html

相关文章:

  • (RK3566驱动开发 - 1).pinctrl和gpio子系统
  • css三角制作(二十课)
  • C++_priority_queue(优先级队列)
  • 微信小程序——01开发前的准备和开发工具
  • MySQL 的主从复制数据同步
  • python——面向对象
  • Microsoft 365 Exchange如何设置可信发件IP白名单
  • LM27313典型电路之升压电路
  • 嵌入式面试八股文(七)·#ifndef#define#endif的作用、以及内存分区(全局区、堆区、栈区、代码区)
  • 【弱监督视频异常检测】2024-ESWA-基于扩散的弱监督视频异常检测常态预训练
  • Android 13 实现屏幕熄屏一段时候后关闭 Wi-Fi 和清空多任务列表
  • Elasticsearch磁盘占用大于95%时将所有索引置为只读
  • 删除 git config 保存的密码
  • Springboot环境搭建详解
  • SpringCloud框架学习(第三部分:Resilience4j 与 Micrometer)
  • Scala的Map集合(不可变)
  • 深入剖析:Spring MVC与Struts的较量
  • 4.Mybatis中,在Mapper的SQL映射文件中,使用<choose><when>无法识别参数的情况
  • antd proFromSelect 懒加载+模糊查询
  • Spring Boot 牛刀小试 org.springframework.boot:spring-boot-maven-plugin:找不到类错误
  • qt中ctrl+鼠标左键无法进入
  • 丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍
  • 本机ip地址和网络ip地址一样吗
  • websocket身份验证
  • 案例解读 | 某三甲医院IT监控体系升级实例
  • Ubuntu20.04 为脚本文件创建桌面快捷方式 ubuntu
  • LeetCode297.二叉树的序列化和反序列化
  • 应用程序部署(IIS的相关使用,sql server的相关使用)
  • 小程序源码-模版 100多套小程序(附源码)
  • UE5运行时创建slate窗口