jdk8中stream的flatMap

mapflatMap 都是对流对象进行处理,转换成另一个流对象,但是使用场景有区别。

map:元素一对一转换,使用传入的Function对象,对Stream中的所有元素进行处理,返回的Stream对象中的元素为原元素处理后的结果;
注意是只有一个数组
flatMap:元素一对多转换,使用传入的Function对象,对原Stream中的所有元素进行操作,每个元素会有一个或者多个结果,然后将返回的所有元素组合成一个统一的Stream并返回。

所以,对简单的list进行处理,可以用map,但是如果数据结构复杂,list嵌套list的情况下,我们还想对每个list 中的元素进行处理,有些时候map 做不到,就需要用flatMap。

比如数据结构类似这样:
List<Map<String, List<Student>>>

注意是多个数组
public static void main(String[] args) {
        List<String> list = Arrays.asList("tom", "jame", "jerry", "hello");
        List<String[]> collect = list.stream().map(s -> s.split("")).collect(Collectors.toList());
        System.out.println(collect);

        List<String> list2 = Arrays.asList("tom", "jame", "jerry", "hello");
        List<String> collect2 = list2.stream().map(s -> s.split("")).flatMap(s -> Arrays.stream(s)).collect(Collectors.toList());
        System.out.println(collect2);
    }

结果如下:
[[Ljava.lang.String;@65ae6ba4, [Ljava.lang.String;@48cf768c, [Ljava.lang.String;@59f95c5d, [Ljava.lang.String;@5ccd43c2]
[t, o, m, j, a, m, e, j, e, r, r, y, h, e, l, l, o]

可见,map只是各玩各的,最后收集的还是一个个数组,各自为政。而flatmap就是将所有的数组,汇聚成一个。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容