Stream
/*
* steam
* 是一个集合,是lazy的,可以用于存放无穷多个元素
* 使用#::得到一个stream
* */
//initNum是传入的初始值
//initNum+1是通项公式
//不断回调函数numsForm
def numsForm(initNum:BigInt):Stream[BigInt]={
initNum #:: numsForm(initNum+1)
}
//传递值并打印
val numStream = numsForm(0)
//输出Stream(0, ?)
println(numStream)
//拿到除了第一个元素外的所有元素的集合:Stream(1, ?)
println(numStream.tail)
//每使用一次,就调用numsForm一次:Stream(2, ?)
//tail方法会出发stream的使用,会在调用.tail方法的stream上新增元素
println(numStream.tail.tail)
val s1= numStream.tail
val s2 = s1.tail
//输出Stream(1, 2, ?)
println(s1)
//输出Stream(2, ?)
println(s2)
view
/*
* 视图View
* 也是Lazy的,是有限的
* view不会缓存数据,每次都要重新计算
* 打印其中的回文数
* */
val viewSquares = (1L to 100000L)
.view
.map(x =>x).filter(x => {
x.toString == x.toString.reverse
})
//打印第三个数字
println(viewSquares(3))
//打印所有元素
println(viewSquares.mkString(" "))
for(x <- viewSquares){
print(x + ",")
}