19Stream

本文最后更新于 2021-08-05 11:42:59

Stream

串行流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
object Demo1 {
def main(args: Array[String]): Unit = {
val l1 = List(1, 2, 3, 4, 9, 7, 5, 8)
val stream = l1.toStream
//stream是惰性操作
//获取第一个
println(stream.head)
//获取第二个
println(stream.tail.head)
//此时已经有两个数据了
println(stream)
//Stream(1, 2, ?)

//强制获取所有的
println(stream.force)
//从无限流获取
//这里不加force 就只有第一项
println(getSteam.take(10).force)

//获取斐波那契数列
println(fibSeq(10))
}

//无限流
def getSteam:Stream[Int]={
1 #:: getSteam
}

//斐波那契数列
def fibSeq(n:Int):List[Int]={
def loop(a:Int,b:Int) :Stream[Int]={
a #::loop(a,a+b)
}
loop(1,1).take(n).force.toList
}
//斐波那契数列2
def fibSeq2(n:Int):List[Int]={
def loop() :Stream[Int]={
1 #:: loop.scanLeft(1)(_+_)
}
loop.take(n).force.toList
}
}

并行流

1
2
3
4
5
6
7
object Demo2 {
def main(args: Array[String]): Unit = {
val l1 = List(1, 2, 3, 4, 9, 7, 5, 8)
//并行流
l1.par.foreach(x=> println(Thread.currentThread().getName))
}
}

19Stream
https://jiajun.xyz/2020/11/18/scala/19Stream/
作者
Lambda
发布于
2020年11月18日
更新于
2021年8月5日
许可协议