Java 8 操作流

来源:互联网 发布:流程优化 编辑:程序博客网 时间:2024/06/05 00:18

什么是流?

流是Java API的新成员,它允许你已声明式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。并且流还可以透明的并行处理,你无需再写任何多线程代码了

比如现在有一个菜肴列表 菜肴类中有菜肴名称name和卡路里calories
现在我们需要把卡路里小于300的菜肴名称按照卡路里排序并保存List中

Java 8前
这里写图片描述
上面代码分别处理卡路里小于300、匿名类排序、处理排序后菜名列表
此外 这段代码中 lowCaloricDishes的唯一作用就是作为一次性的中间容器,而在Java 8中 实现细节被放在它本该归属的类库了

Java 8
这里写图片描述
如果想要并行这段代码,你只要把stream()换成parallelStream()即可

再比如我们希望对菜肴类别进行分组
这里写图片描述

流的特性

通过上面两个例子我们可以发现Java 8的优势

声明式——更简简洁,更宜读
可复合——更灵活
可并行——性能更好
这里需要说明一点,和迭代器类似,流只能遍历一次,遍历完后,我们说这个流已经被消费掉了
所以要记得:流只能被消费一次!

外部迭代与内部迭代

集合:外部迭代
这里写图片描述

流:内部迭代
这里写图片描述

流的操作

这里写图片描述
可以连接起来的流操作称为中间操作,关闭流的操作称为终端操作

总结下流的使用

一个数据源(如集合)来执行一个查询
一个中间操作链,形成一条流的流水线
一个终端操作,执行流水线并生成结果

中间操作有
filter、map、limit、sorted、distinct

终端操作有
forEach、count、collect

下次我们详细分享下可以用的流操作来表达复杂的数据处理查询
比如过滤、切片、查找、匹配、映射、归约、去重、跳过等等