介绍

在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流的函数式编程一起使用。