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集合中的函数(扩展)的更多相关文章

  1. [Scala]集合中List元素转Tuple元素的函数迭代写法

    ____ 本文链接: https://www.cnblogs.com/senwren/p/Scala-Lis-2-Tuple.html —— Scala没有提供相应写法, 但迭代写法仍然可以做到. 有 ...

  2. scala集合和高级函数操作

    scala常用函数操作 reduceLeft   是将集合的元素从左向右进行所需要的相应操作,图以减法为例展示,表达的算法是 : 1-2-3-4-5 例: (1 to 5).reduceLeft(_ ...

  3. Scala集合操作中的几种高阶函数

    Scala是函数式编程,这点在集合操作中大量体现.高阶函数,也就是能够接收另外一个函数作为参数的函数. 假如现在有一个需要是将List集合中的每个元素变为原来的两倍,现在来对比Java方式实现和Sca ...

  4. day11.1函数进阶 列表集合 字典中的函数变量,函数作为形参

    函数进阶 1.函数作为变量 a=123 name="gao" nums=[1,2,3] data=nums#指向同一个内存地址 #查看内存地址篇章 def func(): prin ...

  5. 【转载】C#中使用Average方法对List集合中相应元素求平均值

    在C#的List集合操作中,有时候需要对List集合元素进行汇总求平均值,如数值类型的List集合元素,有时候对象类型的List集合也需要对集合中的元素的某个对象进行汇总求平均值,此时都可以使用到Av ...

  6. Scala函数式编程(三) scala集合和函数

    前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...

  7. Scala中的函数高级使用

    1.偏函数 1.基本介绍 在对符合某个条件,而不是所有情况进行逻辑操作时,使用偏函数是一个不错的选择 将包在大括号内的一组case语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范 ...

  8. 用Scala实现集合中相邻元素间的差值

    欢迎转载,转载请注明出处,徽沪一郎. 概要 代码这东西,不写肯定不行,新学Scala不久,将实际遇到的一些问题记录下来,日后也好查找. 今天讲的是如何计算同一集合中元素两两之间的差值,即求开始集合(a ...

  9. 【Scala篇】--Scala中的函数

    一.前述 Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明. 二.具体函数 1.Scala函数的定义 def fun (a: Int , b: Int ) ...

随机推荐

  1. django-rest-framework-源码解析004-三大验证(认证/权限/限流)

    三大验证模块概述 在DRF的APIView重写的dispatch方法中,  self.initial(request, *args, **kwargs) 这句话就是执行三大验证的逻辑, 点进去可以看到 ...

  2. python txt装换成excel

    工作中,我们需要经常吧一些导出的数据文件,例如sql查出来的结果装换成excel,用文件发送.这次为大家带上python装换excel的脚本 记得先安装wlwt模块,适用版本,python2-3 #c ...

  3. git chechout

    在克隆完一个的版本库时,git会在本地创建一个master分支用于跟踪远端的master分支 如git clone abc.git 默认情况下git会在本地创建一个master分支 但是,在本地mas ...

  4. C语言中的 “>>”与“<<”

    1. ">>" int x = 16; printf("%d\n", x >> 1); 先将x转成二进制 10000, 不读最后一位, ...

  5. 环境篇:DolphinScheduler-1.3.1安装部署及使用技巧

    环境篇:DolphinScheduler-1.3.1安装部署 1 配置jdk JDK百度网盘:https://pan.baidu.com/s/1og3mfefJrwl1QGZGZDZ8Sw 提取码:t ...

  6. 使用 you-get 下载免费电影或电视剧

    安装 you-get 和 ffmpeg ffmpeg 主要是下载之后,合并音频和视频 pip install you-get -i http://pypi.douban.com/simple/ --t ...

  7. Django学习路4_数据库添加元素,读取及显示到网页上

    在 views 中实现对数据库的添加和读取数据库 添加数据 对象 = models 中创建的类名() 对象.列名 = '字段值' 对象.save() 进行保存 return HttpResponse( ...

  8. PHP preg_grep() 函数

    preg_grep 函数用于返回匹配模式的数组条目.高佣联盟 www.cgewang.com 语法 array preg_grep ( string $pattern , array $input [ ...

  9. PHP tanh() 函数

    实例 返回不同数的双曲正切: <?php高佣联盟 www.cgewang.comecho(tanh(M_PI_4) . "<br>");echo(tanh(0.5 ...

  10. luogu 1587 [NOI2016]循环之美

    LINK:NOI2016循环之美 这道题是 给出n m k 求出\(1\leq i\leq n,1\leq j\leq m\) \(\frac{i}{j}\)在k进制下是一个纯循环的. 由于数值相同的 ...