Java8学习—函数式数据处理

1、 什么是流?

​ 流的定义是从支持数据处理操作的源生成的元素序列,流的目的在于表达计算,比如:filter、map、reduce、find、match、sort等。流操作有两个特点:

​ (1)流水线—很多流操作本身会返回一个流,这样多个操作就可以链接起来,形成一个流水线。

​ (2)内部迭代—与使用迭代器显示迭代的集合不同,流的迭代器操作是在背后进行的。

​ 下面两端代码都是用来返回低热量的菜肴名称的,并按照卡路里排序,一个用Java7来写的,另一个是Java8的流写的。

​ 这段代码中有一个垃圾变量 lowCaloricDishes,它唯一的目的就是作一次性的中间容器。Java8只需要一行代码就可以实现上说的功能:

​ 新的方法实现有几个显而易见的好处:

​ (1)代码是以声明性方式写的,说明想要完成什么而不是如何实现一个操作。

​ (2)可以把几个基础操作链接起来,来表达复杂的数据处理流水线,同时保持代码清晰可读。

1.1、集合和流的差异?

​ 集合是一个内存中的数据结构,它包含数据结构中目前所有的值—集合中的每个元素都得先算出来才能添加到集合中。流则是在概念上固定的数据结构,其元素是按需计算的。

1.2、只能遍历一次

​ 流只能遍历一次,遍历完之后,我们就说这个流已经被消费掉了。可以从原始数据源那里再获得一个新的流来重新遍历一遍。

2、如何使用流?

​ 流的使用一般包括三件事:

​ (1)一个数据源来执行一个查询

​ (2)一个中间操作链,形成一条流的流水线

​ (3)一个终端操作,执行流水线,并能生成结果。


流的一些中间操作如图所示:




3、并行数据处理与性能

3.1、什么是并行流?

并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样一来,就可以自动把给定操作的工作负荷分配给多个处理器的所有内核。

4、思考题

1、Map和FlatMap的区别?

2、并行流部分有时间深入研究下。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容