📔C4 Streams介绍
type
status
date
summary
slug
tags
category
icon
password
这一章的主要内容包括:
1.Streams简介
2.Collections和Streams比较
3.内部迭代和外部迭代
4.中间操作和终端操作
Streams简介
Streams可以让你通过声明式编程处理集合,并且还能隐式实现并行操作。
下面是一段运用streams API的代码。
在运用parallelStream时,有两个问题:
·使用了多少线程?
·性能得到了什么优化?
可以看到,这段代码通过
filter
、sorted
、map
方法实现了链式编程,最后通过collect
方法收集stream流内的元素。诸如
filter
、sorted
、map
等方法作为不依赖于特定线程模型的高级构建块(high-level building blocks)提供,它们的内部实现可以是单线程的,也可以隐式最大化多核架构(multicore architecture)。Streams vs. collections
streams注重数据处理,而collections注重数据本身。
二者最大的区别在于数据何时进行计算。对于集合,数据在进入集合之前必须都经过计算;对于流,它是一种概念上固定的数据结构(不能往里面添加或者删除元素),数据是按需进行计算的。
拿播放视频作为例子,集合像是一张DVD光盘,而流更接近于你在流媒体网站上观看视频。
❗一个流只能被遍历一次!被遍历一次后,这个流就相当于被消耗了。
内部迭代和外部迭代
这部分概念很简单。集合使用外部迭代,而流使用内部迭代。
下面是一段使用
for-each
循环遍历menu
的代码:下面是一段使用流遍历
menu
的代码:通过代码我们可以感受到,二者有以下区别。
- 流可以一次性处理所有数据,通过诸如
map
、filter
等方法。
- 流可以隐式地实现并行操作,无需我们实现并行控制。
中间操作和终端操作
中间操作即链式编程中的
filter、map、limit、sorted、distinct
等方法,它们的返回值依然是一个stream
类型。终端操作即链式编程中的
forEach、count、collect
等方法,它们的返回值可以是除stream
外的任何数据结构。关于这部分的具体内容可以查看Java8 In Action C5.
总结
- 流是来自支持数据处理操作的源的元素序列。
- 流使用内部迭代。
- 流使用中间操作来构建一个管道,这个管道并不产生结果。
- 流使用终端操作来对管道的数据进行处理,并返回结果。
- 流的数据是按需处理的。
Prev
C3 Lambda详解
Next
建站教程
Loading...