Java 8 操作流

什么是流?

流是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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值