Java8新特性之Stream流与集合

流与集合

我们先来打个直观的比方吧。比如说存在DVD里的电影,这就是一个集合(也许是字节,也 许是帧,这个无所谓),因为它包含了整个数据结构。现在再来想想在互联网上通过视频流看同 样的电影。现在这是一个流(字节流或帧流)。流媒体视频播放器只要提前下载用户观看位置的 那几帧就可以了,这样不用等到流中大部分值计算出来,你就可以显示流的开始部分了(想想观 看直播足球赛)。特别要注意,视频播放器可能没有将整个流作为集合,保存所需要的内存缓冲 区——而且要是非得等到最后一帧出现才能开始看,那等待的时间就太长了。出于实现的考虑, 你也可以让视频播放器把流的一部分缓存在集合里,但和概念上的差异不是一回事。
粗略地说,集合与流之间的差异就在于什么时候进行计算。集合是一个内存中的数据结构, 它包含数据结构中目前所有的值——集合中的每个元素都得先算出来才能添加到集合中。(你可 以往集合里加东西或者删东西,但是不管什么时候,集合中的每个元素都是放在内存里的,元素 都得先算出来才能成为集合的一部分。)
相比之下,流则是在概念上固定的数据结构(你不能添加或删除元素),其元素则是按需计 算的。 这对编程有很大的好处。在第6章中,我们将展示构建一个质数流(2, 3, 5, 7, 11, …)有 多简单,尽管质数有无穷多个。这个思想就是用户仅仅从流中提取需要的值,而这些值——在用 户看不见的地方——只会按需生成。这是一种生产者-消费者的关系。从另一个角度来说,流就 像是一个延迟创建的集合:只有在消费者要求的时候才会计算值(用管理学的话说这就是需求驱 动,甚至是实时制造)。
与此相反,集合则是急切创建的。以质数为例,要是想创建一个包含所有质数的集合,那这个程序算起 来就没完没了了,因为总有新的质数要算,然后把它加到集合里面。当然这个集合是永远也创建 不完的,消费者这辈子都见不着了。

(转载自《Java8 in action》)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值