Java Stream API 操作详解
1. 扁平化流(Flattening Streams)
在流操作中, map
操作实现的是一对一映射,即输入流的每个元素对应输出流的一个元素。而 Java 的 Streams API 还支持通过 flatMap
操作实现一对多映射,其工作流程如下:
1. 接收一个输入流,使用映射函数生成输出流。
2. 映射函数从输入流中取出一个元素,并将该元素映射为一个流。输入元素的类型和映射流中的元素类型可能不同,这一步会生成一个流的流。假设输入流是 Stream<T>
,映射流是 Stream<Stream<R>>
,其中 T
和 R
可以相同也可以不同。
3. 最后将输出的流的流扁平化,生成一个普通流,即将 Stream<Stream<R>>
转换为 Stream<R>
。
下面通过具体例子来理解 flatMap
操作。假设有一个包含数字 1、2、3 的流,我们希望生成一个包含这些数字及其平方的流,即 1、1、2、4、3、9。
错误示例
Stream.of(1, 2, 3)
.map(n -> Stream.of(n, n * n))
.forEach(System.out