为什么Java 8的功能样式结构称为“流”?

时间:2015-06-05 15:12:46

标签: java java-8 java-stream

传统上认为术语“流”与I / O操作有关。 Java为其功能式操作选择术语“流”的原因是什么?

2 个答案:

答案 0 :(得分:7)

“流”不一定与I / O相关,而是一个概括的概念,指的是流经系统的信息。

Stream Processing(维基百科链接Mr.Me)与SIMD处理或基于矢量的计算有关的概念也类似于Java 8 Streams API提供的计算风格。

然而,我相信Java 8中“流”的主要灵感来自本书:计算机程序的结构和解释,2 / e。 Abelson,Sussman和Sussman。麻省理工学院出版社,1996年。(这本书可以在MIT Press website上阅读免费。)

以下是第3章介绍部分的一些段落,模块化,对象和状态,,在我的精装版第217-218页。

  

在本章中,我们将研究两种突出的组织策略,这两种策略源于两种截然不同的系统结构“世界观”。第一个组织策略专注于对象,将大型系统视为不同对象的集合,其行为可能随时间而变化。另一种组织策略集中在系统中流动的信息的,就像电气工程师查看信号处理系统一样。

     

...

     

处理对象,变更和身份的困难是我们在计算模型中需要及时处理的一个基本结果。当我们允许同时执行程序时,这些困难变得更大。当我们将模型中的模拟时间与评估期间计算机中发生的事件的顺序分离时,可以最充分地利用流方法。我们将使用称为延迟评估的技术来完成此任务。

第3.5节( Streams ,第316页)包含对流方法的详细讨论。

可以肯定的是,Java 8的Streams与SICP引入的流不同。但是一些基本概念,例如不变性,延迟评估以及通过系统的价值流 - 与“就地”变异值相反 - 非常相似。上面提到的“抓住时间”的概念似乎让人联想到Java 8 Streams中关于遇到订单处理订单的问题。

当我们开发系统时,我们踢了许多不同的词来描述图书馆试图表达的内容。我们最终使用“流”比任何其他单词更多,并且它卡住了。

答案 1 :(得分:2)

Stream Processing是一个广泛的概念,其中出现了反应性函数式编程。

这个想法是围绕数据变化构建任务,这些变化通常被称为事件,但每次在流中推送新数据,或者发生变化时,任务都会执行以处理该变化。

例如,在功能性反应式编程中,您可能希望在按钮上侦听单击事件,每次单击发生时,新事件都会按下事件流,您可以处理它。

所以即使你构建的代码(任务)可能与流没有任何关系,也没有正确处理新值。场景背后的引擎/概念是编年史的数据流。

类似于输入输出流,在某种意义上,数据也在那里顺序流动。

了解更多:read this blog post