• 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(...)
    
    }
    

      

  • 相关阅读:
    js技巧大全
    DOM
    网页页面跳转几种方法
    JavaScript中创建对象的几种方式
    web本地存储-UserData
    图片预加载
    闭包
    JavaScript高级编程学习笔记(第三章之一)
    .net core 部署到ubuntu
    fiddler autoresponder 动态修改响应内容
  • 原文地址:https://www.cnblogs.com/noyouth/p/12759608.html
Copyright © 2020-2023  润新知