Scala集合中的函数(扩展)
1.拉链(zip)
将两个集合进行 对偶元组合并,可以使用拉链
object Demo_031 {
def main(args: Array[String]): Unit = {
val list1 = List(1, 2 ,3)
val list2 = List(4, 5, 6)
val list3 = list1.zip(list2) // (1,4),(2,5),(3,6)
println("list3=" + list3)
}
}
输出

注意事项
- 拉链的本质就是两个集合的合并操作,合并后每个元素是一个对偶元组。
- 操作的规则下图:

- 如果两个集合个数不对应,会造成数据丢失。
- 集合不限于List, 也可以是其它集合比如 Array
- 如果要取出合并后的各个对偶元组的数据,可以遍历
for(item<-list3){
print(item._1 + " " + item._2) //取出时,按照元组的方式取出即可
}
2.迭代器(Iterator)
通过iterator方法从集合获得一个迭代器,通过while循环和for表达式对集合进行遍历

实例:
object Demo_032 {
def main(args: Array[String]): Unit = {
val iterator = List(1, 2, 3, 4, 5).iterator // 得到迭代器
println("--------遍历方式1 -----------------")
while (iterator.hasNext) {
println(iterator.next())
}
println("--------遍历方式2 for -----------------")
for (enum <- iterator) {
println(enum) //
}
}
}
3.流(stream)
stream是一个集合。这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(使用时才加载)

使用tail,会动态的向stream集合按规则生成新的元素
object Demo_033 {
def main(args: Array[String]): Unit = {
def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)
val stream1 = numsForm(1)
println(stream1) //
//取出第一个元素
println("head=" + stream1.head) //
println(stream1.tail) //注意不能使用stream.last,否则会陷入无限循环
println(stream1) //
}
}
运行结果

实例:使用map映射stream的元素并进行一些计算
object Demo_034 {
def main(args: Array[String]): Unit = {
def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)
def multi(x:BigInt) : BigInt = {
x * x
}
println(numsForm(5).map(multi)) //? (25,?)
}
}
输出

4.视图(view)
Stream的懒加载特性,也可以对其他集合应用view方法来得到类似的效果,具有如下特点:
- view方法产出一个总是被懒执行的集合。
- view不会缓存数据,每次都要重新计算,比如遍历View时。
实例:请找到1-100 中,数字倒序排列 和它本身相同的所有数。(1 2, 11, 22, 33 ...)
object Demo_035 {
def main(args: Array[String]): Unit = {
def eq(i: Int): Boolean = {
i.toString.equals(i.toString.reverse)
}
//说明: 没有使用view
val viewSquares1 = (1 to 100).filter(eq)
println(viewSquares1)
//使用view
val viewSquares2 = (1 to 100).view.filter(eq)
println(viewSquares2)
}
}
输出结果

5.并行集合

应用案例 parallel
- 打印1~5
object Demo_036 {
def main(args: Array[String]): Unit = {
def method(i:Int): Unit ={
print("\t"+i)
}
(1 to 5).foreach(method)
println()
(1 to 5).par.foreach(method)//并行方式输出
}
}
输出

- 查看并行集合中元素访问的线程
val result1 = (0 to 100).map{case _ => Thread.currentThread.getName}
val result2 = (0 to 100).par.map{case _ => Thread.currentThread.getName}
println(result1)
println(result2)
Scala集合中的函数(扩展)的更多相关文章
- [Scala]集合中List元素转Tuple元素的函数迭代写法
____ 本文链接: https://www.cnblogs.com/senwren/p/Scala-Lis-2-Tuple.html —— Scala没有提供相应写法, 但迭代写法仍然可以做到. 有 ...
- scala集合和高级函数操作
scala常用函数操作 reduceLeft 是将集合的元素从左向右进行所需要的相应操作,图以减法为例展示,表达的算法是 : 1-2-3-4-5 例: (1 to 5).reduceLeft(_ ...
- Scala集合操作中的几种高阶函数
Scala是函数式编程,这点在集合操作中大量体现.高阶函数,也就是能够接收另外一个函数作为参数的函数. 假如现在有一个需要是将List集合中的每个元素变为原来的两倍,现在来对比Java方式实现和Sca ...
- day11.1函数进阶 列表集合 字典中的函数变量,函数作为形参
函数进阶 1.函数作为变量 a=123 name="gao" nums=[1,2,3] data=nums#指向同一个内存地址 #查看内存地址篇章 def func(): prin ...
- 【转载】C#中使用Average方法对List集合中相应元素求平均值
在C#的List集合操作中,有时候需要对List集合元素进行汇总求平均值,如数值类型的List集合元素,有时候对象类型的List集合也需要对集合中的元素的某个对象进行汇总求平均值,此时都可以使用到Av ...
- Scala函数式编程(三) scala集合和函数
前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...
- Scala中的函数高级使用
1.偏函数 1.基本介绍 在对符合某个条件,而不是所有情况进行逻辑操作时,使用偏函数是一个不错的选择 将包在大括号内的一组case语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范 ...
- 用Scala实现集合中相邻元素间的差值
欢迎转载,转载请注明出处,徽沪一郎. 概要 代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找. 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a ...
- 【Scala篇】--Scala中的函数
一.前述 Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明. 二.具体函数 1.Scala函数的定义 def fun (a: Int , b: Int ) ...
随机推荐
- 下载spring的路径的文章,已经试用没问题
文章:https://blog.csdn.net/ethan__xu/article/details/80273249 spring jar下载路径 http://repo.spring.io/rel ...
- js:事件(注册、解绑、DOM事件流、事件对象、事件委托)
1.注册事件 (1)传统方式注册事件 <body> <button id="b1">请点击</button> <script> va ...
- AttributeError: module 'time' has no attribute 'clock'
在python3.8中flask项目运行报错: AttributeError: module 'time' has no attribute 'clock'解决方案 主要原因是因为python3.8中 ...
- JVM 学习笔记记录
JVM 学习笔记记录 Sun JDK 监控和故障处理工具 名称 主要作用 jps JVM Process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程 jstat JVM S ...
- Docker 基础知识 - 使用 tmpfs 挂载(tmpfs mounts)管理应用程序数据
卷(volumes) 和 绑定挂载(bind mounts) 允许您在主机和容器之间共享文件,这样即使在容器停止后也可以持久存储数据. 如果在 Linux 上运行 Docker,那么还有第三种选择:t ...
- ORACLE常用语句:
ORACLE常用语句: 1.首先,创建(新)用户: create user username identified by password; username:新用户名的用户名 password: 新 ...
- 老板让我从上千个Excel中筛选数据,利用Python分分钟解决!
大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 很多人学习python,不知道从何学起.很多人学习 ...
- 用 Python 写个消消乐小游戏
提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 很多人学习python,不 ...
- PyTorch上路
PyTorch torch.autograd模块 深度学习的算法本质上是通过反向传播求导数, PyTorch的autograd模块实现了此功能, 在Tensor上的所有操作, autograd都会为它 ...
- 网易云音乐ncm格式分析以及ncm与mp3格式转换
目录 NCM格式分析 音频知识简介 两种可能 GitHub项目 格式分析 总体结构 密钥问题 代码分析 main函数 导入模块 dump函数 参考资料 代码完整版 转换工具 ncmdump ncmdu ...