java8Stream map和flatmap的区别
介绍
在Java中,map()和flatMap()方法通常与流API组合使用,以转换和操作数据。这两种方法都适用于流,允许对流的每个元素执行操作,从而产生一个新的流。让我们详细了解每种方法:
map()
map()
方法用于将流的每个元素转换为另一个对象。它接受一个Function
作为参数,该函数定义转换逻辑。此函数应用于流的每个元素,结果收集到一个新的流中。以下是一个map()
方法的示例:
List<String> 名字 = Arrays.asList("Alice", "Bob", "Charlie"); List<Integer> 名字长度 = 名字.stream() .map(String::length) .collect(Collectors.toList()); System.out.println(名字长度); // 输出: [5, 3, 7]
在上面的示例中,我们有一个名字列表。使用map()
方法,我们将每个名字转换为其长度,使用String::length
方法引用。所产生的流包含名字的长度,它们被收集到一个新列表中。
flatMap()
flatMap()
方法用于将流的每个元素转换为零个或多个新流的元素。它接受一个Function
作为参数,该函数将每个元素映射到一个流。所产生流的元素然后被连接到一个流中。让我们看一个flatMap()
方法的示例:
List<List<Integer>> 数字 = Arrays.asList( Arrays.asList(1, 2, 3), Arrays.asList(4, 5, 6), Arrays.asList(7, 8, 9) ); List<Integer> 展开数字 = 数字.stream() .flatMap(List::stream) .collect(Collectors.toList()); System.out.println(展开数字); // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
在上面的示例中,我们有一个列表列表,其中每个内部列表表示一组数字。通过使用flatMap()
方法和List::stream
作为映射函数,我们将嵌套结构展平到一个包含所有数字的流中。
总结
总之,map()
方法用于将流的每个元素转换为另一个对象,而flatMap()
方法用于将每个元素转换为零个或多个新流的元素,然后将它们连接起来。这两种方法都是用于数据转换的强大工具,通常与Java流的函数式编程一起使用。
暂无标签
评论功能已关闭