flatMap() Method in Java 82025 年 5 月 7 日 | 阅读 10 分钟 在Java 8 Streams中,flatMap()方法将操作应用于映射函数,并提供元素值的流。这意味着在每个元素的每次迭代中,map()方法都会创建一个单独的新流。通过使用扁平化机制,它将所有流合并成一个单一的结果流。简而言之,它用于将“流的流”转换为“值的列表”。 ![]() flatMap()方法的工作方式如下:
语法 该方法接受一个函数作为参数。它接受T作为参数,并返回R的流。 R: 这是一个类型参数,表示新流的元素类型。 mapper: 这是一个参数,是一个非干涉、无状态的函数,应用于每个元素。它产生一个新值流。 mapper具有以下属性: 非干涉(Non-Interfering):该属性表示mapper不会更改输入流中的元素。相反,它为输入流中的每个元素生成一个不同的结果。 无状态(Stateless):与依赖于先前处理过的项的状态化行为相反,无状态行为独立处理每个元素。因此,对于给定的输入,mapper在不考虑先前元素的情况下始终产生相同的输出。 总之,我们可以说flatMap()方法有助于将**Stream<Stream<T>>**转换为**Stream<T>**。它同时执行**扁平化(flat或flatten)**和**映射(map)**。Stream.flatMap()方法结合了这两种操作,即flat和map。 Java Stream.flatMap()方法的返回值Java的**flatMap()**方法返回一个类型为**R**的新流。从语法中讨论的方法签名可以看出这一点。 该方法,**flatMap()**,暗示了两个不同的操作:
让我们理解扁平化的含义。 什么是扁平化?扁平化是指将嵌套的数据结构(例如集合的集合)转换为单一的、扁平的结构的过程。当我们在编程中想要简化嵌套数据(如列表或数组)到单一列表或数组时,通常会使用它。 在Java中,可以使用流来实现这一点,我们可以将列表的列表转换为单个列表。flatMap()方法通常在Java中用于执行扁平化。 例如,将整数列表的列表转换为单个整数列表,消除任何嵌套结构,从而得到一个一维集合。 扁平化示例考虑以下列表的列表: 扁平化之前 [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]] 扁平化之后 [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22] flatMap()方法示例我们可以使用List::stream作为映射函数在流上调用flatMap()方法。执行流的终止操作时,flatMap()的每个元素都会提供一个单独的流。在最后阶段,flatMap()方法将所有流转换为一个新的流。在上面的流中,我们观察到它不包含重复值。 让我们创建一个Java程序并使用flatMap()方法。 示例编译并运行输出 List Before Applying mapping and Flattening: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Lighten, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] List After Applying Mapping and Flattening Operation: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Light Pen, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] Stream.flatMap()方法的使用场景将嵌套列表扁平化为列表将嵌套列表扁平化为单个列表是处理复杂数据结构时的常见操作。在Java 8中,可以使用flatMap()方法高效地实现这一点。 示例编译并运行输出 [1, 2, 3, 4, 5, 6, 7, 8, 9] 将嵌套数组扁平化为列表将嵌套数组扁平化为单个列表是与扁平化嵌套列表类似的另一个常见操作。在Java 8中,也可以使用**flatMap()**方法高效地实现这一点,但处理数组的方式略有不同。 示例编译并运行输出 [1, 2, 3, 4, 5, 6, 7, 8, 9] Java Stream.flatMap()与原始类型在Java 8中,Stream API为原始类型提供了专门的流,例如**IntStream、LongStream**和**DoubleStream**。当使用这些原始流时,您可能需要使用**flatMap()**方法来扁平化原始类型的嵌套结构。 示例编译并运行输出 [1, 2, 3, 4, 5, 6, 7, 8, 9] 文本文件的单词计数在文本处理和分析中,计算文本文件中的单词数量是一项基本任务。此操作在各种应用中非常有用,例如文本分析、内容管理和数据预处理。在Java中,我们可以使用Stream API高效地执行单词计数。Stream API提供了一种现代的、函数式的方法来处理元素序列,使其非常适合读取和操作文本文件等任务。 示例编译并运行输出 Word count: 37 Demo.txt
现在,我们已经理解了Stream类的两种方法,因为我们可以轻松地指出它们之间的关键区别。 Stream.flatMap()和Stream.map()方法之间的区别下表描述了Stream.flatMap()和Stream.map()之间的关键区别。 ![]()
要记住的重要事项
Java Stream.flatMap()方法MCQ1. flatMap()方法执行以下哪种映射?
答案:2) 解释: 它执行一对多映射,涉及将一个值映射为零个或多个值。例如,当您将单个字符串流扁平化为零个或多个字符串值时,就会发生一对多映射。 2. flatMap()方法执行哪些操作?
答案:3) 解释: 它同时执行扁平化(flat或flatten)和映射(map)。Stream.flatMap()方法结合了这两种操作,即flat和map。 3. flatMap()方法中的mapper是什么?
答案:3) 解释: 这是一个参数,是一个非干涉、无状态的函数,应用于每个元素。它产生一个新值流。 4. 关于flatMap()方法,以下哪项是正确的?
答案:3) 解释: flatMap()方法将操作应用于映射函数,并提供元素值的流。这意味着在每个元素的每次迭代中,map()方法都会创建一个单独的新流。通过使用扁平化机制,它将所有流合并成一个单一的结果流。 5. 以下哪项是flatMap()方法的有效用例?
答案:1) 解释: flatMap()方法的使用场景包括:
|
在Java中,SOLID原则代表了应用于软件结构设计的面向对象方法。由Robert C. Martin(也称为Uncle Bob)构思的这五项原则彻底改变了面向对象编程的世界,并改变了软件的编写方式。通过遵循SOLID原则,开发人员...
阅读 12 分钟
Java中的选择语句是控制流语句,允许您根据特定条件在代码中做出决策。这些语句使您的Java程序能够根据特定条件是真还是假来执行不同的代码块。选择语句是基本...
阅读 15 分钟
在编程中,将一种类型转换为另一种类型是一个关键任务。有时我们需要将一种类型转换为另一种类型。在 Java 转换部分,我们已经讨论了各种类型的转换。在本节中,我们可以讨论如何将十六进制转换为...
7 分钟阅读
在 Java 编程的世界中,克隆在创建项目的相同副本方面起着关键作用。它提供了一种复制项目状态的机制,使开发人员可以在不影响原始项目的情况下使用副本。Java 提供了几种实现克隆的方法,...
5 分钟阅读
什么是? 定义、类型和示例 JDK 包含 ,它们是软件的集成组件。Java 的 API 提供了通信接口和接口,用于各种程序之间的通信。什么是? API 是 JDK 随附的关键软件组件。类、接口和用户界面都是...的示例
阅读 4 分钟
?许多任务涉及日期计数,例如安排事件和计算两个日期之间的天数。Java中内置的Date和Calendar类使处理日期更加简单,并允许您对它们执行许多操作,...
阅读 4 分钟
Java.nio.DoubleBuffer 具有 compact() 函数。要压缩提供的缓冲区,请使用 DoubleBuffer 类。值从缓冲区的起始点和其限制转移到缓冲区。,n+1 被分配到缓冲区的插槽,并且其容量设置为...
阅读 3 分钟
SonarQube 是一个开源的静态测试分析软件。开发人员使用它来管理源代码的质量和一致性。一些代码质量检查包括:潜在的 bug 设计中的代码缺陷代码重复测试覆盖率不足过度复杂性静态测试这是一种在程序运行之前检查源代码的调试方法...
阅读 6 分钟
CLASSPATH:CLASSPATH 是一个环境变量,应用程序类加载器使用它来定位和加载 .class 文件。CLASSPATH 定义了查找 Java 平台不包含的第三方和用户定义类的路径。包含包含...的所有目录。
5 分钟阅读
二叉树的广度优先遍历在Java中也称为二叉树的层序遍历。对于以下二叉树:层序遍历为:18 20 30 60 34 45 65 12 50 98 82 31 59 71 41 使用递归一种...
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India