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、并行流部分有时间深入研究下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值