前言
这次主要记录和分析下map
和flatMap
的区别
Map
作用是把Stream
的元素通过Function回调函数进行转换处理后返回一个新的Stream
下面是接口的声明
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
flatMap
作用是将一个多维数组通过Function回调函数进行转换处理并拍平后返回一个新的Stream
。
其中Function处理完是一个Stream
。
也就是说吗,flatMap
相当于map
+ flattening
下面是接口的声明
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
举例说明
Map
List<String> list = Arrays.asList("item1", "item2", "item3", "item4");
Stream<String> map = list.stream().map(e -> {
return e + "-added";
});
System.err.println(map.collect(Collectors.toList()));
//[item1-added, item2-added, item3-added, item4-added]
faltMap
List<String> list1 = Arrays.asList("item11", "item12", "item13", "item14");
List<String> list2 = Arrays.asList("item21", "item22", "item23", "item24");
List<String> list3 = Arrays.asList("item31", "item32", "item33", "item34");
List<List<String>> listOfLists = Arrays.asList(list1, list2, list3);
List<String> listOfAllIntegers = listOfLists.stream()
.flatMap(x -> x.stream().map((e->{
return e + "-added";
})))
.collect(Collectors.toList());
System.out.println(listOfAllIntegers);
// [item11-added, item12-added, item13-added, item14-added, item21-added, item22-added, item23-added, item24-added, item31-added, item32-added, item33-added, item34-added]
综述
Map
擅长用来处理一对一的Stream
流;而 flatMap
则擅长处理多对一的Stream
流