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 类,可以一次处理一行。