行业资讯 2025年08月6日
0 收藏 0 点赞 751 浏览 2035 个字
摘要 :

文章目录 1.Stream的anyMatch() API 1.1 语法 1.2 描述 2.Stream的anyMatch()例子 示例1:检查流是否包含特定元素 示例2:使用多个谓词的Stream.anyMatch() 3.anyMa……




  • 1.Stream的anyMatch() API
    • 1.1 语法
    • 1.2 描述
  • 2.Stream的anyMatch()例子
    • 示例1:检查流是否包含特定元素
    • 示例2:使用多个谓词的Stream.anyMatch()
  • 3.anyMatch()与contains()的区别
  • 4. 结论

Java Stream的anyMatch()方法是一个终端短路操作,用于检查流中是否存在至少一个元素满足给定Predicate。

1.Stream的anyMatch() API

1.1 语法

boolean anyMatch(Predicate<? super T> predicate)

如果至少有一个元素满足Predicate条件,则anyMatch()方法返回true,否则返回false。

1.2 描述

  • 这是一个短路终端操作。
  • 它返回此流中是否有任何元素匹配提供的Predicate。
  • 如果没有必要确定结果,可能不会对所有元素应用Predicate。 一旦遇到第一个匹配的元素,方法就会返回true。
  • 如果流为空,则返回false,并且不会评估Predicate。
  • allMatch()和anyMatch()之间的区别在于,anyMatch()只要流中的任何元素满足给定的Predicate就返回true。 当使用allMatch()时,所有元素都必须匹配给定的Predicate。

2.Stream的anyMatch()例子

示例1:检查流是否包含特定元素

在这个Java示例中,我们使用anyMatch()方法来检查流是否包含字符串”four”。

由于我们看到流包含该字符串,因此该示例的输出为true。

Stream<String> stream = Stream.of(\"one\", \"two\", \"three\", \"four\");

boolean match = stream.anyMatch(s -> s.contains(\"four\"));

System.out.println(match); //true

示例2:使用多个谓词的Stream.anyMatch()

要满足多个条件,请使用两个或多个简单谓词创建一个组合谓词。

在这个例子中,我们有一个Employee类型的列表。 我们想要检查是否有年龄超过50岁并且收入超过40,000的员工。

在列表中,员工”D”和”F”收入超过40k并且年龄超过50岁,因此结果为true。

public class Main 
{
  public static void main(String[] args) 
  {
    Predicate<Employee> olderThan50 = e -> e.getAge() > 50;
    Predicate<Employee> earningMoreThan40K = e -> e.getSalary() > 40_000;
    Predicate<Employee> combinedCondition = olderThan50.and(earningMoreThan40K);
     
    boolean result = getEmployeeStream().anyMatch(combinedCondition);
    System.out.println(result); //true
  }
   
  private static Stream<Employee> getEmployeeStream()
  {
    List<Employee> empList = new ArrayList<>();
    empList.add(new Employee(1, \"A\", 46, 30000));
    empList.add(new Employee(2, \"B\", 56, 30000));
    empList.add(new Employee(3, \"C\", 42, 50000));
    empList.add(new Employee(4, \"D\", 52, 50000));
    empList.add(new Employee(5, \"E\", 32, 80000));
    empList.add(new Employee(6, \"F\", 72, 80000));
     
    return empList.stream();
  }
}
 
@Data
@AllArgsConstructor
class Employee 
{
  private long id;
  private String name;
  private int age;
  private double salary;
}

3.anyMatch()与contains()的区别

从理论上讲,当我们想检查列表中是否存在某个元素时,anyMatch()和contains()之间没有区别。在某些情况下,流的并行特性可能为大型List带来优势,但我们不应随意假设使用Stream.parallel()会使事情变得更快。实际上,调用parallel()可能会降低小型流的表现。

4. 结论

anyMatch()方法在某些情况下很有用,我们需要检查流中是否有至少一个元素。更简洁的版本list.contains()也可以达到同样的效果,可以作为替代使用。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9579.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号