`
jilen
  • 浏览: 98373 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Scala的Stream

 
阅读更多

Stream 和 List 一样,是一种递归的数据结构  

从大学到工作一直是java,c++,c,c#这些都不是函数式的编程语言,并且递归已经被判了死刑(通常因为系统方法调用栈太小,且JVM不会做尾递归优化)。所以,Stream这样递归的数据结构,理解起来不是那么自然。

 

看个简单例子

          lazy val fib: Stream[BigInt] = Stream.cons(1, Stream.cons(1, (fib zip fib.tail).map(p => p._1 + p._2)))

 

非波那且数列,,,好吧,这个例子一点也不简单,对于我来说。

 

它定义了一个无限的数列。 这在我以前看来简直是不可能的。

一个无限的数列可以进行 (fib zip fib.tail).map(p => p._1 + p._2) 这种疯狂的操作,这怎么可能呢?居然不会堆栈溢出

 

 cons看起来像函数,其实是一个对象

 

   我将其翻译递归表达式

 

lazy val fib1: Int => List[Int] = { x =>
      x match {
         case 1 => 1 :: Nil
         case 2 => 1 :: 1 :: Nil
         case n if n > 2 => 1 :: 1 :: (fib1(n - 1).tail zip fib1(n - 2)).map(p => p._1 + p._2)
      }
   }

 

两者性能,不可同日而语

     fib因为是一个lazy的Stream,所以在定义不会进行任何计算。只有在调用fib.take(10)时才会计算。依次构造出(1,(1,(2,(3,(5.......这样的递归的数据结构‘

 

具体可以看这里 http://stackoverflow.com/questions/7225310/scala-pattern-matching-variable 这个问题的一个答案,我画了插图解释

 

 

分享到:
评论

相关推荐

    stream-benchmark:Scala Stream 上的简单基准测试

    标题“stream-benchmark:Scala Stream 上的简单基准测试”揭示了这是一个关于使用Scala编程语言进行流处理性能评估的项目。Scala Stream是Scala语言中的一个特性,它允许我们处理无限数据序列,同时保持低内存消耗和...

    scala2.12.1Windows镜像包

    - **JVM兼容性**:Scala 2.12.x主要针对Java 8及更高版本进行优化,充分利用了JVM的新特性,如Lambda表达式和Stream API。 - **互操作性**:Scala可以直接调用Java库,反之亦然,这得益于良好的Java互操作性。 - ...

    scala-2.11.12.tgz

    6. **更好的互操作性**:Scala 2.11加强了与Java代码的互操作,包括对Java 8新特性的支持,如Lambda表达式和Stream API。 7. **模块化**:2.11版本开始将Scala库划分为多个模块,比如编译器、运行时、标准库等,...

    scala-2.12.7.zip

    Scala 2.12.x版本是针对Java 8及更高版本的,它引入了对Java 8特性的支持,如lambda表达式和Stream API的互操作。版本号中的".7"表示这是一个维护更新,可能修复了一些已知问题,提升了性能,或者增加了新的特性。 ...

    scala-2.12.0.tgz

    Scala 2.12.0是一个重要的版本更新,它提供了对Java 8的更好支持,尤其是对于lambda表达式和Stream API的兼容性。 1. **Scala语言特性**: - **多范式编程**:Scala支持面向对象和函数式编程,使得开发者可以根据...

    scala-2.11.8源码

    10. **Scala-2.11.8对Java 8的支持**:此版本增加了对Java 8新特性的支持,如Lambda表达式和Stream API。查看相关源码,可以理解Scala是如何与Java 8无缝集成的。 总的来说,深入学习Scala-2.11.8的源码是一项挑战...

    scala-2.11.8.tgz

    此外,Scala-2.11.8对Java 8的支持意味着你可以利用Lambda表达式、Stream API等新特性,使得与Java代码的互操作变得更加顺畅。 总之,`scala-2.11.8.tgz` 是Scala开发者的重要资源,它包含了所有你需要开始或继续...

    scala-2.12.9.zip

    2. **Java 8兼容**:Scala 2.12完全支持Java 8的特性,如Lambda表达式和Stream API,使得开发者可以无缝地在两种语言间切换。 3. **Dotty兼容性**:Scala 2.12在向Scala 3(原名Dotty)过渡的过程中,引入了一些新...

    Scala-2.12.8 sbt-1.2.8 安装包

    2.12.x系列的一个显著特点是它对Java 8的支持,包括对lambda表达式和Stream API的集成。 Scala的安装文件`scala-2.12.8.msi`是一个Windows安装程序,它将帮助用户在他们的系统上设置Scala环境,包括Scala命令行解释...

    scala-2.11.7.msi的安装版本

    Scala 2.11.x系列引入了许多改进和新特性,包括更好的类型推断、更高效的编译器以及对Java 8特性的支持,如Lambda表达式和Stream API。这个版本也优化了与Java库的互操作性,使得混合Java和Scala项目更加无缝。 ...

    scala-2.11.8.zip

    这个版本的Scala兼容Java 8,因此它可以无缝地与Java代码集成,利用Java 8的新特性,如lambda表达式和Stream API。 Scala-2.11.x系列是Scala的一个重要分支,其中的数字11代表的是它兼容的Java虚拟机(JVM)版本。...

    Scala 2.11-API.chm

    这个版本引入了更好的类型推断、性能提升以及对Java 8特性的支持,如Lambda表达式和Stream API。此外,它还增强了对并发编程的支持,提供了更强大的Actor模型和软件事务内存(STM)。 在API方面,Scala的基础库非常...

    scala 2.12.4

    - **兼容性**:Scala 2.12.4与Java 8兼容,利用了Java 8的新特性,如Lambda表达式和Stream API。这使得Scala开发者能够更好地与Java生态系统集成。 - **编译器优化**:2.12.x版本的编译器进行了大量优化,提高了...

    Scala 2.12.0 (Linux)

    2. **Java 8 兼容**:此版本支持 Java 8 的 Lambda 表达式和 Stream API,使得与 Java 代码的交互更加平滑。 3. **性能提升**:2.12.0 版本通过使用更现代的 JVM 特性(如 invokedynamic)和编译器优化,提升了运行...

    Scala和Spark大数据分析函数式编程、数据流和机器学习

    通过DStream(Discretized Stream)抽象,开发者可以将实时数据流视为一系列离散的批处理作业,从而利用Spark的并行处理能力。 在机器学习部分,MLlib提供了各种算法,包括分类、回归、聚类、协同过滤等。这些算法...

    scala-2.12.8

    2.12主要关注的是与Java 8的兼容性,特别是利用了Java 8的Lambda表达式和Stream API,同时保持向后兼容早期的2.x版本。 在压缩包中,有两个文件: 1. `scala-2.12.8.msi`:这是Windows安装程序包,使用Microsoft ...

    Scala并发编程程.rar

    它包括Actor、Stream、HTTP服务器等功能,广泛应用于构建高可用、高伸缩性的应用。 学习Scala并发编程,除了阅读指定的《Scala编程》或《Scala编程思想》书籍外,还可以参考Akka官方文档,参与开源项目,进行实战...

    大数据书籍-Scala编程(高清)

    读者将了解如何设置DStream(Discrete Stream),处理实时数据流,以及如何实现窗口、滑动窗口和状态管理等高级实时计算功能。 通过阅读《大数据书籍-Scala编程》,读者不仅能掌握Scala编程的基础和高级技巧,还能...

    Scala and Spark for Big Data Analytics

    Work on a wide array of applications, from simple batch jobs to stream processing and machine learning Explore the most common as well as some complex use-cases to perform large-scale data analysis ...

Global site tag (gtag.js) - Google Analytics