关于java:Java-8中map和flatMap方法有什么区别

34次阅读

共计 955 个字符,预计需要花费 3 分钟才能阅读完成。

在 Java 8 中,map() 和 flatMap() 是 Stream API 中的两个罕用办法,用于对流中的元素进行转换操作。它们的次要区别在于它们的返回类型和转换形式。

map() 办法:

  • map() 办法将流中的每个元素都映射到另一个对象。它接管一个函数作为参数,该函数将以后流中的每个元素转换为另一个对象。
  • map() 办法的返回类型是一个新的 Stream 对象,其中蕴含了通过映射后的元素。
  • map() 办法保留了流的构造,也就是说,原始流中的每个元素都会依照映射函数的规定进行转换,并放入新的流中。

示例代码:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream()
                                .map(name -> name.length())
                                .collect(Collectors.toList());
System.out.println(nameLengths); 

// 输入:[5, 3, 7]

flatMap() 办法:

  • flatMap() 办法将流中的每个元素都转换为蕴含零个或多个元素的流。它接管一个函数作为参数,该函数将以后流中的每个元素转换为一个流。
  • flatMap() 办法的返回类型是一个新的 Stream 对象,其中蕴含了所有转换后的元素。这些元素被合并成一个新的流。
  • flatMap() 办法将每个元素转换为流后,会将所有的流合并为一个流,而不保留原始流的构造。

示例代码:

List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2, 3),
    Arrays.asList(4, 5, 6),
    Arrays.asList(7, 8, 9)
);
List<Integer> allNumbers = numbers.stream()
                                   .flatMap(list -> list.stream())
                                   .collect(Collectors.toList());
System.out.println(allNumbers);

// 输入:[1, 2, 3, 4, 5, 6, 7, 8, 9]

总结一下,map() 办法用于映射每个元素到另一个对象,而 flatMap() 办法用于将每个元素转换为一个流,并将所有转换后的流合并成一个流。

正文完
 0