1 流 Stream

stream是一个集合。这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结果才进行计算的) 。

创建Stream对象

  1. def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)
  2. val stream1 = numsForm(1)

说明

Stream 集合存放的数据类型是BigInt

numsForm 是自定义的一个函数,函数名是程序员指定的。

创建的集合的第一个元素是 n , 后续元素生成的规则是 n + 1

后续元素生成的规则是可以程序员指定的 ,比如 numsForm( n * 4)...

使用tail,会动态的向stream集合按规则生成新的元素

  1. //创建Stream
  2. def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)
  3. val stream1 = numsForm(1)
  4. println(stream1) //
  5. //取出第一个元素
  6. println("head=" + stream1.head) //
  7. println(stream1.tail) //
  8. println(stream1) //?

使用map映射stream的元素并进行一些计算

  1. //创建Stream
  2. def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)
  3. def multi(x:BigInt) : BigInt = {
  4. x * x
  5. }
  6. println(numsForm(5).map(multi)) //? (25,?)

2 视图 View

基本介绍

Stream的懒加载特性,也可以对其他集合应用view方法来得到类似的效果,具有如下特点:

1)view方法产出一个总是被懒执行的集合。

2)view不会缓存数据,每次都要重新计算,比如遍历View时。

  1. def multiple(num: Int): Int = {
  2. num}
  3. def eq(i: Int): Boolean = {
  4. i.toString.equals(i.toString.reverse)
  5. }
  6. //说明: 没有使用view
  7. val viewSquares1 = (1 to 100)
  8. .map(multiple)
  9. .filter(eq)
  10. println(viewSquares1)
  11. //for (x <- viewSquares1) {}
  12. //使用view
  13. val viewSquares2 = (1 to 100)
  14. .view
  15. .map(multiple)
  16. .filter(eq)
  17. println(viewSquares2)

3 线程安全的集合

所有线程安全的集合都是以Synchronized开头的集合

  1. SynchronizedBuffer
  2. SynchronizedMap
  3. SynchronizedPriorityQueue
  4. SynchronizedQueue
  5. SynchronizedSet
  6. SynchronizedStack

4 并行集合

1)Scala为了充分使用多核CPU,提供了并行集合(有别于前面的串行集合),用于多核环境的并行计算。

2)主要用到的算法有: Divide and conquer : 分治算法,Scala通过splitters(分解器),combiners(组合器)等抽象层来实现,主要原理是将计算工作分解很多任务,分发给一些处理器去完成,并将它们处理结果合并返回

应用案例

1)打印1~5

2)查看并行集合中元素访问的线程

  1. val result1 = (0 to 100).map{case _ => Thread.currentThread.getName}
  2. val result2 = (0 to 100).par.map{case _ => Thread.currentThread.getName}
  3. println(result1)
  4. println(result2)

5 操作符

scala 数据结构(十一):流 Stream、视图 View、线程安全的集合、并行集合的更多相关文章

  1. Scala数据结构

    Scala数据结构 主要的集合特质 Scala同时支持可变集合和不可变集合,优先采用不可变集合.集合主要分为三大类:序列(List),集(set),映射(map).所有的集合都扩展自Iterable特 ...

  2. 11. Scala数据结构(下)-集合操作

    11.1 集合元素的映射-map映射操作 11.1.1 看一个实际需求 要求:请将List(3,5,8)中所有的元素都*2,将其结果放到一个新的集合中返回,即返回一个新的List(6,10,16),请 ...

  3. MySQL视图view/存储过程和函数的使用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  4. Java中的函数式编程(八)流Stream并行编程

    写在前面 在本系列文章的第一篇,我们提到了函数式编程的优点之一是"易于并发编程". Java作为一个多线程的语言,它通过 Stream 来提供了并发编程的便利性. 题外话: 严格来 ...

  5. 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法

    这是view中的model代码: @model t_user_info 这是web.config配置文件只的代码: <namespaces> <add namespace=" ...

  6. SQL Server 索引(index) 和 视图(view) 的简单介绍和操作

    --索引(index)和视图(view)-- --索引(index)----概述: 数据库中的索引类似于书籍的目录,他以指针形式包含了表中一列或几列组合的新顺序,实现表中数据库的逻辑排序.索引创建在数 ...

  7. UIViewController的生命周期(根视图view从无到有的过程)

    UIViewController的生命周期实质上是指根视图view从无到有的过程 1.首先新建一个工程:不从mainstoryBoard加载 (删除入口) 在AppDelegate.m --> ...

  8. 视图(View)与部分视图(Partial View)之间数据传递

    写ASP.NET MVC程序,我们经常需要把数据从视图(View)传递至部分视图(Partial View) 或者相反. 今天Insus.NET使用 ControllerBase.TempData 进 ...

  9. MVC中视图View向控制器传值的方法

    MVC中视图View向控制器传值的方法步骤如下: 1.index页面: 页面中只需要一个触发事件的按钮

随机推荐

  1. ubuntu12.04 dnw2 fl2440 配置

    1.安装libusb-dev sudo apt-get install libusb-dev 2.dnw2编译配置 源码如下,将其保存为dnw2.c 编译命令 gcc dnw2.c -o dnw2 - ...

  2. Say Something About Of Flash Android

    Why am I need say something about of flash android? It's at my college life when I touch flash andro ...

  3. Sublime Text 3.1 注册码

    加入到hosts文件: 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com hosts 文件的位置: Windows : c:/ ...

  4. Eureka加了secsecurity后注册失败

    报错信息: com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known ...

  5. 快捷键浏览存储过程的内容(执行文中的User Store Proc,设置快捷方式的指向usp_Name)

    虽然不常用,但使用时还是在用传统方法查看存储过程的内容, sp_helptext usp_Name;下面这段执行后可设置快捷查询usp的内容(但是需要在每个数据库下都存在,不能直接在master,并且 ...

  6. android中获取其他应用的SharedPreferences

    在android中获取其他应用的SharedPreferences,需要其他应用设置的Mode为MODE_WORLD_READABLE或者MODE_WORLD_WRITABLE两种模式.要获取其他应用 ...

  7. vue事件修饰符与按钮修饰符

    事件修饰符:(当事件无需传参数时可直接写成以下形式,有参数时则为@click.stop="handleLiClick($event)") stop:阻止事件冒泡行为(子元素被点击, ...

  8. Java并发编程的艺术(一、二章) ——学习笔记

    第一章  并发编程的挑战 需要了解的一些概念 转自 https://blog.csdn.net/TzBugs/article/details/80921351 (1) 同步VS异步 同步和异步通常用来 ...

  9. cb03a_c++_数据结构_顺序容器_STL_stack

    /*cb03a_c++_数据结构_顺序容器_STL_stack堆栈:LIFO--Last In First Out后进先出,用于系统程序设计自适应容器(容器适配器),不是独立的容器,是一个适配器栈适配 ...

  10. C# WPF - MVVM实现OPC Client管理系统

    前言 本文主要讲解采用WPF MVVM模式设计OPC Client的过程,算作对于WPF MVVM架构的学习记录吧!不足之处请不吝赐教,感谢! 涉及知识点 C#基础 Xaml基础 命令.通知和数据绑定 ...