便捷开发

jdk8中stream的flatMap

2022-12-02  本文已影响0人  virtual灬zzZ

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

上一篇下一篇

猜你喜欢

热点阅读