Stream.map()在 Java 8 中,和方法有什么区别Stream.flatMap()?
Stream.map()
Stream.flatMap()
两者map和flatMap都可以应用于 aStream<T>并且它们都返回 a Stream<R>。不同之处在于该map操作为每个输入值生成一个输出值,而该flatMap操作为每个输入值生成任意数量(零个或多个)值。
map
flatMap
Stream<T>
Stream<R>
这反映在每个操作的参数中。
该map操作采用 a Function,为输入流中的每个值调用它并生成一个结果值,该结果值被发送到输出流。
Function
该flatMap操作采用概念上想要消耗一个值并产生任意数量的值的函数。但是,在 Java 中,方法返回任意数量的值是很麻烦的,因为方法只能返回零或一个值。可以想象一种 API,其中 mapper 函数flatMap获取一个值并返回一个数组或List的值,然后将其发送到输出。鉴于这是流库,表示任意数量的返回值的一种特别恰当的方法是映射器函数本身返回一个流!映射器返回的流中的值从流中排出并传递给输出流。每次调用映射器函数返回的值的“团块”在输出流中根本没有区别,因此输出被称为“扁平化”。
List
典型的用途是如果它想要发送零值,或者如果它想要返回多个值,则flatMap返回的映射器函数。但是当然可以返回任何流。Stream.empty()``Stream.of(a, b, c)
Stream.empty()``Stream.of(a, b, c)