38-实现自己的流生成器
8.12 实现自己的流生成器
数据流是一系列数据,允许以顺序或并行方式将一系列操作(通常用lambda表达式来表示)应用于其中,以过滤、转换、分类、减少或构建新的数据结构。它是在Java 8中引入的,并且是该版本中引入的最重要功能之一。
那些数据流是基于 Stream
接口以及 java.util.stream
包中包含的一些相关的类和接口的。而且还涉及许多其他类中引入的新方法,用以生成来自不同数据结构的流。你可以从实现 Collection
接口的每个数据结构上创建一个 Stream
接口,这些数据来自 File、Directory、Array
和其他许多源。
Java还包含了不同的机制,通过它们为自己的源来创建流。而其中最重要的如下。
Supplier
接口:该接口定义了get()
方法。当Stream需要处理另一个对象时,它将由Stream
调用。你可以使用Stream
类的generate()
静态方法,并利用Supplier
接口来创建Stream
。由于考虑到这个源可能是无限的,所以必须使用诸如limit()
或类似的方法来限制Stream
中元素的数量。Stream.Builder
接口:该接口提供了向Stream
中添加元素的accept()
和add()
元素,以及build()
方法,该方法返回使用之前元素创建的Stream
接口。Spliterator
接口:该接口定义了遍历和拆分源元素的必要方法。可以使用Stream Support
类的stream()
方法生成Stream
接口来处理Spliterator
的元素。
在本节中,我们将学习如何实现自己的 Spliterator
接口以及如何创建 Stream
接口来处理数据。这里我们将会使用元素矩阵。一个普通的 Stream
接口应该一次处理一个元素,但若要使用 Spliterator
类,可以一次处理一行。