stream是一个集合。这个集合,能够用于存放无穷多个元素,可是这无穷个元素并不会一次性生产出来,而是须要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结果才进行计算的) 。程序员
建立Stream对象算法
def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1)
val stream1 = numsForm(1)
说明缓存
Stream 集合存放的数据类型是BigInt安全
numsForm 是自定义的一个函数,函数名是程序员指定的。ide
建立的集合的第一个元素是 n , 后续元素生成的规则是 n + 1函数
后续元素生成的规则是能够程序员指定的 ,好比 numsForm( n * 4)...spa
使用tail,会动态的向stream集合按规则生成新的元素线程
//建立Stream def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1) val stream1 = numsForm(1) println(stream1) // //取出第一个元素 println("head=" + stream1.head) // println(stream1.tail) // println(stream1) //?
使用map映射stream的元素并进行一些计算code
//建立Stream def numsForm(n: BigInt) : Stream[BigInt] = n #:: numsForm(n + 1) def multi(x:BigInt) : BigInt = { x * x } println(numsForm(5).map(multi)) //? (25,?)
基本介绍orm
Stream的懒加载特性,也能够对其余集合应用view方法来获得相似的效果,具备以下特色:
1)view方法产出一个老是被懒执行的集合。
2)view不会缓存数据,每次都要从新计算,好比遍历View时。
def multiple(num: Int): Int = { num} def eq(i: Int): Boolean = { i.toString.equals(i.toString.reverse) } //说明: 没有使用view val viewSquares1 = (1 to 100) .map(multiple) .filter(eq) println(viewSquares1) //for (x <- viewSquares1) {} //使用view val viewSquares2 = (1 to 100) .view .map(multiple) .filter(eq) println(viewSquares2)
全部线程安全的集合都是以Synchronized开头的集合
SynchronizedBuffer
SynchronizedMap
SynchronizedPriorityQueue
SynchronizedQueue
SynchronizedSet
SynchronizedStack
1)Scala为了充分使用多核CPU,提供了并行集合(有别于前面的串行集合),用于多核环境的并行计算。
2)主要用到的算法有: Divide and conquer : 分治算法,Scala经过splitters(分解器),combiners(组合器)等抽象层来实现,主要原理是将计算工做分解不少任务,分发给一些处理器去完成,并将它们处理结果合并返回
应用案例
1)打印1~5
2)查看并行集合中元素访问的线程
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)