Java8-11-stream 引入流

本系列文章来自CSDN

原文地址:

https://blog.csdn.net/ryo1060732496/article/details/88806283

什么是流?

流是Java API的新成员,它允许你以声明的方式处理数据集合,简单来说,可以把它当作数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码了。

流简介

Java8中的集合支持一个新的stream方法,它会返回一个流(接口定义在java.util.stream.Stream里)。你在后面会看到,还有很多其他的方法可以得到流,比如利用数值范围或从I/O资源生成流元素。

那么,流到底是什么呢?简短的定义就是从支持数据处理操作的源生成的元素序列。

List<Dish> menu = Dish.MENU;
//从menu获得流
List<String> threeHightCaloricDishNames = menu.stream()
    // 通过链式操作,筛选出高热量的菜肴
    .filter(d -> d.getCalories() > 300)
    // 获取菜名
    .map(Dish::getName)
    .limit(3)
    .collect(Collectors.toList());

我们使用了声明性的方式来处理菜单数据,并没有去实现筛选(filter)、提取(map)或截断(limit)功能,Stream库已经自带了。

流和集合的差别
  1. 是否急切

Java现有的集合概念和新的流概念都提供了接口,来配合代表元素型有序值的数据接口。所谓有序,就是说我们一般是按顺序取用值,而不是随机取用的。那这两者有什么区别呢?

打个比方说,我们在看电影的时候,这些视频就是一个流(字节流或帧流),流媒体视频播放器只要提前下载用户观看位置的那几帧就可以了,这样不用等到流中大部分值计算出来。比如,我们在Youtube上看的视频进度条随便拖动到一个位置,你会发现它很快就开始播放了,不需要将整个视频都加载好,而是加载了一段。如果,不按照这种方式的话,我们可以想象一下,视频播放器可能没有将整个流作为集合,保存所需要的内存缓冲区——而且要是非得等到最后一帧出现才能开始看,那等待的时间就太长了,早就没耐心看了。

初略地说,集合与流之间的差异就在于什么时候进行计算。集合是一个内存中的数据结构,它包含数据结构中目前所有的值,集合中的每个元素都得先算出来才能添加到集合中。

相比之下,流则是在概念上固定的数据结构,其元素则是按需计(懒加载)算的。需要多少就给多少。这是一种生产者与消费者的关系。从另一个角度来说,流就像是一个延迟创建的集合:只有在消费者要求的时候才会生成值。与之相反,集合则是急切创建的(就像黄牛囤货一样)。

  1. 只能遍历一次
  2. 外部迭代与内部迭代
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值