Java 中的 Stream noneMatch() 方法及示例

2025年1月7日 | 阅读 6 分钟

Java Stream API 中的 noneMatch() 方法是一个重要函数,用于评估给定流中的所有元素是否都不满足特定条件。当我们需要证明集合中的所有项都不满足某个谓词时,此方法特别有用,该方法返回 'true' 或 'false',具体取决于是否有项符合指定条件。

方法签名

boolean:如果流中没有元素与给定的谓词匹配,则 noneMatch() 方法返回布尔值 true,否则返回 false。

noneMatch:这是方法名,表示该方法在 Stream API 中执行的操作。

Predicate<? super T>:参数 predicate 是 Java util.function 包中的一个函数式接口。它定义了一个名为 test() 的单一方法,该方法接受一个类型为 T(或其超类型)的参数并返回一个布尔值。

示例 1:检查所有字符串是否非空

在此示例中,我们有一个包含 "Assam"、"Banglore" 和 "Chennai" 的单词列表。使用 words.stream(),我们将列表转换为流。noneMatch(String::isEmpty) 使用对 String::isEmpty 的方法引用检查流中是否没有空字符串。输出将为 true,因为 words 中的所有字符串都非空。

文件名: NoneMatchStringExample.java

输出

 
None of the words are empty: true 

示例 2:检查是否有员工年龄小于 18 岁

在此示例中,我们定义了一个具有 name 和 age 属性的 Employee 类。我们创建了三个代表不同年龄的 Employee 实例。employees.stream() 将员工列表转换为流。noneMatch(emp -> emp.getAge() < 18) 使用 lambda 表达式作为谓词来检查是否有员工年龄小于 18 岁。输出将为 false,因为有一个员工(Bob)未成年(年龄 < 18)。

文件名: NoneMatchEmployeeExample.java

输出

 
None of the employees are underage: false   

示例 3:检查书籍列表是否包含特定类型

在此示例中,我们定义了一个具有 title 和 genre 属性的 Book 类。我们创建了三个代表不同类型的 Book 实例。books.stream() 将书籍列表转换为流。noneMatch(book -> book.getGenre().equals(genreToCheck)) 使用 lambda 表达式作为谓词来检查流中的书籍是否都不属于指定的类型。输出将为 true,因为 books 中的书籍都不属于 "科幻" 类型。

文件名: NoneMatchBookExample.java

输出

 
None of the books are in the genre 'Science Fiction': true   

示例 4:检查所有成绩是否高于某个阈值

我们有一个包含双精度值的 grades 列表,代表学生的成绩。noneMatch(grade -> grade < passThreshold) 使用 lambda 表达式作为谓词来检查流中的成绩是否没有低于及格阈值。输出将为 true,因为 grades 中的所有成绩都高于 70.0。

文件名: NoneMatchGradeExample.java

输出

 
None of the grades are below 70.0: true   

示例 5:检查所有交易是否高于某个金额

在此示例中,我们定义了一个带有 id 和 amount 属性的嵌套 Transaction 类。我们创建了一个包含 Transaction 实例的交易列表。transactions.stream() 将交易列表转换为流。noneMatch(transaction -> transaction.getAmount() < thresholdAmount) 使用 lambda 表达式作为谓词来检查流中是否没有交易金额低于 thresholdAmount。输出将为 false,因为交易 "T3" 的金额低于 $100.0。

文件名: TransactionExample.java

输出

 
None of the transactions are below $100.0: false   

示例 6:检查任务列表是否都已标记为完成

在此示例中,我们定义了一个带有 description 和 isCompleted 属性的嵌套 Task 类。我们创建了一个包含 Task 实例的任务列表。tasks.stream() 将任务列表转换为流。noneMatch(task -> !task.isCompleted()) 使用 lambda 表达式作为谓词来检查流中的任务是否没有未完成的。输出将为 false,因为 "Review code" 未完成。

文件名: TaskCompletionExample.java

输出

 
All tasks are completed: false   

示例 7:检查预约列表是否都已确认

在此示例中,我们定义了一个带有 time 和 isConfirmed 属性的嵌套 Appointment 类。我们创建了一个包含 Appointment 实例的预约列表。appointments.stream() 将预约列表转换为流。noneMatch(appointment -> !appointment.isConfirmed()) 使用 lambda 表达式作为谓词来检查流中的预约是否没有未确认的。输出将为 false,因为 "11:00 AM" 的预约未被确认。

文件名: AppointmentConfirmationExample.java

输出

 
All appointments are confirmed: false