2024-05-22 14:39

Java Stream API中的anyMatch()终端操作的用法详解

王姐姐

JavaEE

(801)

(0)

收藏

anyMatch 是 Java Stream API 中的一个终端操作(terminal operation),它用于检查流中的元素是否满足某个给定的条件,只要有一个元素满足条件,它就会返回 true,否则返回 false

anyMatch 通常与 Predicate(谓词)一起使用,Predicate 是一个函数式接口,它接受一个输入参数并返回一个布尔值。你可以使用 lambda 表达式或方法引用来提供这个谓词。

下面是 anyMatch 方法的一些用法示例:

示例 1:检查列表中是否有元素满足条件

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);   boolean hasEvenNumber = numbers.stream().anyMatch(n -> n % 2 == 0);   System.out.println(hasEvenNumber); // 输出 true

在这个示例中,我们检查列表 numbers 中是否有偶数。由于列表中包含偶数 2,所以 hasEvenNumber 被设置为 true

示例 2:使用方法引用作为谓词

List<String> strings = Arrays.asList("apple", "banana", "cherry");   boolean hasShortWord = strings.stream().anyMatch(String::isEmpty);   System.out.println(hasShortWord); // 输出 false     // 如果我们想检查是否有长度小于5的单词   hasShortWord = strings.stream().anyMatch(s -> s.length() < 5);   System.out.println(hasShortWord); // 输出 true

在这个示例中,我们试图使用 String::isEmpty 方法引用作为谓词,但这不是我们想要的(因为我们想检查长度而不是是否为空)。然后,我们使用了一个 lambda 表达式来检查是否有长度小于 5 的单词。

示例 3:在自定义对象列表上使用 anyMatch

List<Person> people = Arrays.asList(      new Person("Alice", 25),      new Person("Bob", 30),      new Person("Charlie", 18)   );     boolean hasAdult = people.stream().anyMatch(p -> p.getAge() >= 18);   System.out.println(hasAdult); // 输出 true

在这个示例中,我们有一个 Person 类的列表,并且我们想检查是否有人的年龄大于或等于 18。由于 Bob 和 Charlie 的年龄都大于 18,所以 hasAdult 被设置为 true

注意事项

  • anyMatch 是一个短路操作(short-circuiting operation),这意味着一旦找到满足条件的元素,它就会停止处理剩余的元素。

  • anyMatch 是一个终端操作,因此它会消耗流。一旦你在流上调用了一个终端操作,你就不能再在该流上调用其他操作(除非重新创建流)。


0条评论

点击登录参与评论