Java 8中map()和flatMap()方法有什么区别?

7 浏览
0 Comments

Java 8中map()和flatMap()方法有什么区别?

在Java 8中, Stream.map()Stream.flatMap() 方法有什么区别?

admin 更改状态以发布 2023年5月20日
0
0 Comments

Stream.flatMap,顾名思义,是一个mapflat操作的组合。这意味着您先将函数应用于元素,然后对其进行扁平化。 Stream.map仅对流应用函数而不对流进行扁平化。

要了解流扁平化的含义,考虑像[ [ 1,2,3 ], [ 4,5,6 ], [ 7,8,9 ] ]这样的结构,它具有“两个级别”。将其扁平化意味着将其转换为“一个级别”的结构:[ 1,2,3,4,5,6,7,8,9 ]

0
0 Comments

mapflatMap都可以应用于Stream,并且它们都返回Stream。区别在于map操作为每个输入值产生一个输出值,而flatMap操作为每个输入值产生任意数量(零个或多个)的值。

这反映在每个操作的参数中。

map操作接受一个Function,该函数对输入流中的每个值调用并产生一个结果值,该值将发送到输出流。

flatMap操作接受一个函数,该函数从概念上希望消耗一个值并产生任意数量的值。然而,在Java中,方法返回任意数量的值非常麻烦,因为方法只能返回零个或一个值。人们可以想象一个API,其中flatMap的映射器函数接受一个值并返回一个数组或List值,然后将这些值发送到输出。鉴于这是流库,表示任意数量的返回值的特别适合的方法是将映射器函数本身返回为一个流!从映射器返回的流中的值从流中取出并传递给输出流。每次调用映射器函数返回的值“块”在输出流中根本没有区别,因此输出被称为“扁平化”。

flatMap中mapper函数的典型用法是,如果它想要发送零值,则返回Stream.empty(),如果它想要返回多个值,则返回诸如Stream.of(a, b, c)之类的东西。但是当然可以返回任何流。

0