java - Java 8中map和flatMap方法有什么区别?

在Java 8中,Stream.mapStream.flatMap方法有什么不同?


最佳答案:

mapflatMap都可以应用于Stream<T>并且它们都返回一个Stream<R>。不同之处在于,map操作为每个输入值生成一个输出值,而flatMap操作为每个输入值生成一个任意数字(零或多个)值。
这反映在每个操作的参数中。
map操作接受输入流中的每个值调用的Function并生成一个结果值,该值发送到输出流。
flatMap操作接受一个函数,该函数在概念上希望使用一个值并生成任意数量的值。然而,在Java中,返回任意数量的值的方法是繁琐的,因为方法只能返回零或一个值。可以想象一个API,其中flatMap的mapper函数接受一个值并返回一个数组或一个List值,然后将其发送到输出。鉴于这是流库,表示任意数量返回值的一种特别适合的方法是映射器函数本身返回流!映射器返回的流中的值将从流中排出,并传递给输出流。在输出流中,对mapper函数的每次调用所返回的值的“聚集”完全没有区别,因此输出被称为“扁平化”。
典型的用法是,映射函数flatMap如果要发送零值,则返回Stream.empty(),如果要返回多个值,则返回类似于Stream.of(a, b, c)的值。当然,任何流都可以返回。