flatMap
是 Java 8 中引入的一个新特性,它属于 java.util.stream
包。flatMap
是一个终端操作,用于将多个流合并为一个流,并将每个流中的元素转换为另一种形式的元素。与其他集合操作相比,flatMap
的不同之处在于它的处理方式和结果类型。
以下是 flatMap
与其他集合操作的不同之处:
-
处理方式:
flatMap
将多个流中的元素按照某种规则(通常是映射函数)转换为新的元素,并将这些新元素合并成一个新的流。而其他集合操作(如map
、filter
等)通常是在单个流上操作,不会创建新的流。 -
结果类型:
flatMap
的结果类型通常是一个流,因为它的目的是将多个流合并为一个流。而其他集合操作的结果类型可能是集合(如List
、Set
等),因为它们通常用于对单个流中的元素进行转换和过滤。 -
并行处理:
flatMap
支持并行处理,可以充分利用多核处理器的优势。当使用parallelStream
时,flatMap
会将多个流分成多个子流,并在不同的线程上并行处理这些子流。而其他集合操作通常只能在单个线程上执行。
举个例子,假设我们有一个 List
,我们可以使用 >
flatMap
将所有子列表中的字符串连接成一个字符串列表:
List> listOfLists = Arrays.asList( Arrays.asList("a", "b"), Arrays.asList("c", "d"), Arrays.asList("e", "f") ); List
flattenedList = listOfLists.stream() .flatMap(list -> list.stream()) .collect(Collectors.toList()); System.out.println(flattenedList); // 输出:[a, b, c, d, e, f]
在这个例子中,flatMap
将多个子列表中的字符串连接成一个字符串列表,这是与其他集合操作的主要区别。