Stream flatMap() 方法用于将集合流扁平化为对象流。这些对象是从原始 Stream 中的所有集合组合而来的。
flatMap() 操作具有对 Stream 的元素应用一对多转换的效果,然后将生成的元素展平为新的 Stream 。
Stream.flatMap()
有助于将Stream<Collection<T>>
转换为Stream<T>
。
flatMap() = 扁平化 + map()
通俗地说,扁平化指的是将多个集合/数组合并为一个。考虑以下示例。
在此示例中,我们有一个包含 3 个数组的数组。扁平化效果后,我们将得到一个结果数组,其中包含 3 个数组中的所有项目。
Before flattening : [[1, 2, 3], [4, 5], [6, 7, 8]]
After flattening : [1, 2, 3, 4, 5, 6, 7, 8]
在以下示例中,lines
是文件中的行流。每行由多个单词组成。 words
流是将所有流变成单个流的加肥版本——由所有行中的所有单词组成。
Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8);
Stream<String> words = lines.flatMap(line -> Stream.of(line.split(" +")));
流 flatMap()
方法具有以下语法。
<R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
R
表示新流的元素类型。mapper
是一个无干扰、无状态的函数,适用于每个产生新值流的元素。R
的新对象流。Stream
接口有另外三个类似的方法,它们生成IntStream
、LongStream
和 $$$
分别在 DoubleStream
操作之后。如果在 flatMap()
操作之后创建的流返回上述给定类型,则考虑直接使用这些函数。
IntStream flatMapToInt(Function<? super T,? extends IntStream> mapper)
LongStream flatMapToLong(Function<? super T,? extends LongStream> mapper)
DoubleStream flatMapToDouble(Function<? super T,? extends DoubleStream> mapper)
flatMap()
是一个中间操作并返回一个新的Stream。mapper
中用于转换的 flatMap()
函数是无状态函数,仅返回新值流。flatMap()
操作使流变平;与不应用扁平化的 map()
操作相反。Stream.flatMap() 函数的 Java 8 示例,用于获取包含列表列表中所有元素的单个 List
。
此程序使用 flatMap()
操作将 List<List<Integer>>
转换为 List<Integer>
。
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]
Stream.flatMap() 函数的 Java 8 示例,用于获取包含数组数组中所有元素的单个 List
。
String[][] dataArray = new String[][]{{"a", "b"},
{"c", "d"}, {"e", "f"}, {"g", "h"}};
List<String> listOfAllChars = Arrays.stream(dataArray)
.flatMap(x -> Arrays.stream(x))
.collect(Collectors.toList());
System.out.println(listOfAllChars);
程序输出。
[a, b, c, d, e, f, g, h]
将您与 Java Stream API 中的Stream flatMap() 方法 相关的问题交给我。
快乐学习!!
地址:https://www.cundage.com/article/stream-flatmap-example.html