Java 8 中的 anyMatch()10 Sept 2024 | 5 分钟阅读 Java 8 中的 anyMatch() 是 Stream 接口中定义的一个方法。它执行**短路终端操作**。在本节中,我们将通过一个示例讨论 **Java 8 Stream 中的 anyMatch() 方法**。在深入主题之前,我们先详细了解一下中间操作和终端操作。 在 Java 8 Stream 中,Stream 操作分为**中间操作**(如 Stream.filter、Stream.map)和**终端操作**(如 Stream.forEach、Stream.reduce)两类。为了获得期望的结果,我们需要将这些操作组合起来形成 Stream 流水线。 中间操作中间操作本质上是惰性的(意味着,不执行实际操作,而是返回一个新的流)。这意味着,它保留了初始流的元素,并始终返回一个由初始流构成的新流。请注意,流的执行要到流流水线的终端操作被执行时才会开始。 中间操作进一步分为**无状态**操作(如 filter 和 map)和**有状态**操作(如 distinct 和 sorted)。 无状态操作无状态操作在处理新元素时,不会保留来自先前元素的任何状态。每个元素都可以独立于其他元素的操作进行处理。 有状态操作有状态操作在处理新元素时,会保留来自先前元素的任何状态。有状态操作的特性是,它在产生结果之前会处理所有输入。 假设我们正在对流执行排序操作,并希望在不查看流的所有元素的情况下从该流产生结果,这是不可能的。因此,除非看到了流的所有元素,否则无法产生结果。因此,我们需要在产生结果之前处理所有输入。 终端操作终端操作遍历流以产生结果或产生副作用。一旦执行了终端操作,流流水线就被认为是已消耗。消耗后,它将无法再使用。如果需要遍历相同的数据源(流),则需要返回流以获取新流。 几乎所有的终端操作都是急切的。这意味着,它们在返回之前会遍历流并处理流水线。请注意,对于 iterator() 和 spliterator() 这两个终端操作是不允许的。 除了上述操作之外,还有一种称为**短路**操作。中间操作和终端操作都可以是短路的。 如果一个流具有无限输入,那么它是一个短路中间操作。它可以产生一个有限的流作为结果。 如果一个流具有无限输入,那么它是一个短路终端操作。它可以在有限的时间内终止。 我们观察到,在流水线中使用短路操作是必要但不充分的。有一个条件需要处理无限流,那就是**在有限时间内正常终止**。 Java 8 Stream.anyMatch()它返回此流中的任何元素是否与提供的谓词匹配。如果无需确定结果,则可能不会对所有元素评估该谓词。 语法 参数:它接受一个**非干扰性**且**无状态**的谓词,该谓词将应用于输入流的元素。 返回值:如果任何元素与指定的谓词匹配,则返回 **true**,否则返回 false。如果流为空,则返回 false。在流为空的情况下,不会评估谓词。 Java anyMatch() 示例AnyMatchExample1.java 输出 true 以下示例显示空流始终返回 false。 AnyMatchExample2.java 输出 false 让我们看另一个 Java 程序,其中我们解析了多个谓词。 要满足多个条件,请创建具有两个或多个简单谓词的组合谓词。在给定的示例中,我们有一个 Employee 列表。我们想检查是否有一个员工的年龄为 28 岁,并且名字以字母 R 开头。以下 Java 程序对此进行了说明。 AnyMatchExample.java 输出 true true false Stream 接口提供了另一个匹配指定谓词的方法,即 **allMatch()**。allMatch() 和 anyMatch() 之间的区别在于,anyMatch() 在流中的任何元素匹配指定谓词时返回 **true**。当使用 allMatch() 时,所有元素都必须匹配给定的谓词。 因此,anyMatch() 方法可以在我们想检查流中至少有一个元素匹配的特定情况下使用。List 类的 contains() 方法也执行相同的操作。因此,我们也可以在 anyMatch() 方法的替代方案中使用 contains() 方法。 因此,List.contains() 和 Stream.anyMatch() 方法之间没有区别。 |
在 Java 中,java.lang.NoClassDefFoundError 是一个类错误,当 Java 虚拟机 (JVM) 无法正确加载和初始化类时发生。此错误是运行时错误,这意味着它发生在程序运行时,而不是在编译时。此问题通常...
阅读 4 分钟
在面向对象编程的领域,不可变性是一个强大的概念,可以提高代码的健壮性、线程安全性和整体程序稳定性。不可变类是指其实例在创建后无法修改的类。虽然不可变性带来了许多优势,但在某些情况下我们需要处理...
7 分钟阅读
Java 编程需要使用异常管理,在商业世界中,软件必须高度可靠、可维护且可扩展,因此遵循异常处理的最佳实践变得更加重要。本文将介绍一些最佳的 Java 异常处理技术...
5 分钟阅读
国际化是开发软件应用程序的过程,使其能够进行各种语言和区域的更改,而无需修改应用程序。开发本地化应用程序会增加应用程序的成本,还需要大量的维护。本地化是适应国际化...
阅读 10 分钟
在本节中,我们将学习二叉树的顶部视图以及实现它的不同方法。在二叉树的顶部视图中,我们只打印从二叉树顶部可见的节点...
阅读 4 分钟
? Java 是一种强大的编程语言,它提供了许多有效的方法来处理和使用数组。将数组传递给函数是数组操作的关键部分。程序员可以通过将数组作为函数参数来执行操作,直接操作数组项。在此...
阅读 8 分钟
在 Java 中,数组是最重要的数据结构,其中包含相同类型的元素。它在连续的内存分配中存储元素。数组有两种类型,即静态数组和动态数组。在本节中,我们将只关注静态数组...
阅读 2 分钟
在 Java 中,日志记录是一项重要的功能,可帮助开发人员跟踪错误。Java 是一种带有日志记录方法的编程语言。它提供了 Java 1.4 版本中引入的日志记录 API。它提供了捕获日志的能力...
阅读 8 分钟
这个问题是顶尖 IT 公司(如 Google、Facebook、Amazon 和 Microsoft)在编码面试中通常会问到的最著名的问题。在本节中,我们将创建 Java 程序(不同逻辑),以从给定数组中构建最大数字。例如:输入:{10, 68, 75,...
阅读 3 分钟
? 在前面的章节中,我们学习了 Apache POI 库。它是一个处理 Microsoft Office 文档的 API。使用 POI 库,我们可以轻松创建 DOC、DOCX、XLS、XLSX、PPT 和 PPTX 文件。如果我们想创建 PDF...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India