查看更多教程 https://on itroad.com
map() 与 flatMap() 的用法
当我们有一个对象流时,我们可以使用 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<Collection<T>>
转换为 Collection<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