美文网首页便捷开发
jdk8中stream的flatMap

jdk8中stream的flatMap

作者: virtual灬zzZ | 来源:发表于2022-12-02 00:20 被阅读0次

    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就是将所有的数组,汇聚成一个。

    相关文章

      网友评论

        本文标题:jdk8中stream的flatMap

        本文链接:https://www.haomeiwen.com/subject/fzadfdtx.html