查看更多教程 https://on  itroad.com

map() 与 flatMap() 的用法

当我们有一个对象流时,我们可以使用 map() 操作,我们需要为流中的每个元素获取一些唯一的值。
输入和输出元素之间存在一对一映射。
例如,我们可以编写一个程序来查找员工流中所有员工的出生日期。

flatMap()的情况下,会创建一对多映射,其中对于每个输入元素/流,我们首先获得多个值,然后将所有此类输入流中的值展平为单个输出流。

Java Stream 方法中 map() 和 flatMap() 的区别

在 Java 中,Stream接口有 >map()flatMap()方法,两者都是中间流操作,并返回另一个流作为方法输出。
map() 与 flatMap() 之间的主要区别在于两种方法的返回类型。

map()仅用于转换,而 flatMap()用于转换和展平(flattening)。

map() 和 flatMap() 的区别

map()方法为流中的每个输入值生成一个输出值。
因此,如果流中有 n个元素,map()操作将产生一个包含 n个输出元素的流。

List<String> listOfStrings = Arrays.asList("1", "2", "3", "4", "5");
List<Integer> listOfIntegers = listOfStrings.stream()
                                .map(Integer::valueOf)
                                .collect(Collectors.toList());
System.out.println(listOfIntegers); 	//[1, 2, 3, 4, 5]

flatMap()是两步过程,例如:map() + 扁平化 (Flattening)。

它有助于将 Collection&lt;Collection&lt;T&gt;>转换为 Collection&lt;T>

List<Integer> list1 = Arrays.asList(1,2,3);
List<Integer> list2 = Arrays.asList(4,5,6);
List<Integer> list3 = Arrays.asList(7,8,9);
List<List<Integer>> listOfLists = Arrays.asList(list1, list2, list3);
List<Integer> listOfAllIntegers = listOfLists.stream()
                            .flatMap(x -> x.stream())
                            .collect(Collectors.toList());
System.out.println(listOfAllIntegers);		//[1, 2, 3, 4, 5, 6, 7, 8, 9]
日期:2020-09-17 00:10:02 来源:oir作者:oir