Skip to content

Commit cba9442

Browse files
committed
修正排版
1 parent 27db43c commit cba9442

File tree

3 files changed

+4
-8
lines changed

3 files changed

+4
-8
lines changed

4-Streams API(I).md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Streams(I)
1+
# Streams API(I)
22

33
你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少功能就清楚了。Java 8之所以费这么大功夫引入函数式编程,原因有二:
44

5-Streams API(II).md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Streams(II)
1+
# Streams API(II)
22

33
上一节介绍了部分*Stream*常见接口方法,理解起来并不困难,但*Stream*的用法不止于此,本节我们将仍然以*Stream*为例,介绍流的规约操作。
44

6-Stream Pipelines.md

+2-6
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,13 @@ for(String str : strings){
7070

7171
注意这里使用的是*“操作(operation)”*一词,指的是“Stream中间操作”的操作,很多Stream操作会需要一个回调函数(Lambda表达式),因此一个完整的操作是*<数据来源,操作,回调函数>*构成的三元组。Stream中使用Stage的概念来描述一个完整的操作,并用某种实例化后的*PipelineHelper*来代表Stage,将具有先后顺序的各个Stage连到一起,就构成了整个流水线。跟Stream相关类和接口的继承关系如下:
7272

73-
<img src="./Figures/Java_stream_pipeline_classes.png" width="500px" align="right" alt="Java_stream_pipeline_classes"/>
73+
<img src="./Figures/Java_stream_pipeline_classes.png" width="500px" align="right" hspace="10px" alt="Java_stream_pipeline_classes"/>
7474

7575
图中还有*IntPipeline*, *LongPipeline*, *DoublePipeline*没有画出,这三个类专门为三种基本类型(不是包装类型)而定制的,跟*ReferencePipeline*是并列关系。图中*Head*用于表示第一个Stage,即调用调用诸如*Collection.stream()*方法产生的Stage,很显然这个Stage里不包含任何操作;*StatelessOp**StatefulOp*分别表示有状态和无状态的Stage,对应与有状态和无状态的中间操作。
7676

77-
<br>
78-
7977
一个可能的流水线示意图如下:
8078

81-
<img src="./Figures/Stream_pipeline_example.png" width="600px" align="left" alt="Stream_pipeline_example"/>
82-
83-
<br>
79+
<img src="./Figures/Stream_pipeline_example.png" width="600px" align="right" alt="Stream_pipeline_example"/>
8480

8581
图中通过*Collection.stream()*方法得到*Head*也就是stage0,紧接着调用一系列的中间操作,不断产生新的Stream。**这些Stream对象以双向链表的形式组织在一起,构成整个流水线,由于每个Stage都记录了前一个Stage和本次的操作以及回调函数,依靠这种结构就能建立起对数据源的所有操作**。这就是Stream记录操作的方式。
8682

0 commit comments

Comments
 (0)