流的简介

流就是一个数据序列(并不是一种数据结构),可以以顺序方式或者并发方式应用某一操作序列来筛选、转换、排序、约简(reduce)或组织这些元素,以获得某一最终对象。

流的基本特征

流的主要特征如下。

流的组成部分

流有三个不同的部分。

流的来源

流的来源可产生将由 Stream 对象处理的数据。

中间操作

中间操作最重要的特征在于它将另一个流作为结果返回。
输入流和输出流的对象可以是不同类型的,但是中间操作总可以生成新流。
一个流可以有 0 个或者多个中间操作。

Stream 接口提供的最重要的中间操作是如下几项:

末端操作

末端操作将某个对象作为结果返回,而绝不会返回一个流。
一般来说,所有流都会以一个末端操作结束,而该末端操作返回的是整个操作序列的最终结果。

最重要的末端操作有如下几项:

MapReduce 与 MapCollect

MapReduce 是一种编程模型,用于在由大量以集群方式工作的机器构成的分布式环境中处理超大规模数据集。

它有两个步骤,通常通过以下两个方法实现。

为了在分布式环境中执行该操作,必须分割数据,然后将其分发到集群中的各台机器上。

Java 9 提供的流操作允许编程人员实现与此非常类似的结果。
Stream 接口定义了可以视为映射函数的中间操作( map() 、 filter() 、 sorted() 、 skip() 等),而且提供了 reduce() 方法作为末端操作,其目的是像 MapReduce 模型的约简操作那样对流的元素进行约简。

约简操作的主要思想是基于前面的中间结果和流元素创建一个新的中间结果。
约简的替代方法(也称为可变约简)是将新的结果项整合到可变容器中(例如将其添加到 ArrayList )。
这种类型的约简通过 collect() 操作执行,因而称之为 MapCollect 模型。