Scala lazy的应用,流Stream和视图View
Posted noyouth
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala lazy的应用,流Stream和视图View相关的知识,希望对你有一定的参考价值。
一、流
动态产生无穷多的数据,末尾元素遵循lazy规则
object StreamDemo { //生成流的方法 def numStream(n: BigInt): Stream[BigInt] = n #:: numStream(n + 1) def main(args: Array[String]): Unit = { val stream = numStream(1) //初始只有一个元素 println(stream) //Stream(1, ?) //获取第一个元素 println(s"head = ${stream.head}") //head = 1 //获取尾部 println(s"tail = ${stream.tail}") //tail = Stream(2, ?) //调用tail方法之后,动态产生了元素2 println(stream) //Stream(1, 2, ?) //为什么不是Stream(2, 4, ?) println(stream.map(_ * 2)) //Stream(2, ?) } }
二、视图
产生一个懒执行的集合
def main(args: Array[String]): Unit = { val seq: immutable.Seq[Int] = (1 to 100).filter(n => n.toString.equals(n.toString.reverse)) println(seq) //Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99) //调用结果view之前,并不会去执行filter等操作 val view: SeqView[Int, immutable.IndexedSeq[Int]] = (1 to 100).view.filter(n => n.toString.equals(n.toString.reverse)) println(view) //SeqViewF(...) }
以上是关于Scala lazy的应用,流Stream和视图View的主要内容,如果未能解决你的问题,请参考以下文章
Scala Stream vs Scala List vs Scala Sequence有啥区别
在线程“ main”中获取Akka流代码时出错,异常java.lang.NoClassDefFoundError:scala / Function1 $ class