1、初解
flapMap()是流的中间操作,是用于扁平化Stream的操作。
JDK API 给出的解析是这样的
Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element.
翻译过来意思就是:
返回一个流,
这个流包含了(所有 映射后生成的流)的全部内容,这个映射由给出的function确定。
还是有点说不太明白,下面结合例子加图解说明(图解是最重要的,一定要看!!!)
2、剖析
例子:
orders:是购物单里的一个流(包含多个购物单)
order:每个购物单都有多个条目,是多个条目的集合
接下来的代码生成包含全部购物单的所有条目的一个流
orders.flatMap(order
-> order.getLineItems().stream())
下面我们来剖析一下:
我们把flatMap分成两步
①map:首先,进行映射map,根据Lambda表达式,将Stream内的order映射成一个 (包含此order里面所有LineItem的) 流 ,也即,现在有一个大流,大流包括多个小流,小流包括多个条目LineItem。
②flat:然后进行扁平化,把所有小流里面的条目提取出来全部放进一同个流,然后返回最后这个流。
图解如下: