map 和 flatMap 都是对流对象进行处理,转换成另一个流对象,但是使用场景有区别。
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]
网友评论