161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

161. Java Lambda 表达式 - 使用工厂方法创建 Predicates

Java 8+ 中,Predicate<T> 接口除了可以通过 lambda 表达式和方法引用创建,还提供了 工厂方法(Factory Methods) 来进一步提升代码的可读性和表现力。


🎯 Predicate 工厂方法概览

方法 说明
Predicate.isEqual(Object targetRef) 返回一个用于判断"是否等于某个对象"的Predicate
Predicate.not(Predicate<T> predicate) 返回一个"否定"现有PredicatePredicate(从 Java 11 起可用)

🧪 示例一:Predicate.isEqual() 工厂方法

java 复制代码
Predicate<String> isEqualToDuke = Predicate.isEqual("Duke");

✅ 这个谓词的含义是:当输入的字符串等于 "Duke" 时,返回 true

等价于传统的写法:

java 复制代码
Predicate<String> isEqualToDuke = s -> "Duke".equals(s);

🔍 用途:可用于对象比较判断,如字符串、枚举、标识符等。


🧪 示例二:Predicate.not() 工厂方法(Java 11+

我们先来一个简单的"判断集合是否为空"的谓词:

java 复制代码
Predicate<Collection<String>> isEmpty = Collection::isEmpty;

如果我们要判断"集合不是空的",可以使用 not()

java 复制代码
Predicate<Collection<String>> isNotEmpty = Predicate.not(isEmpty);

这样相比使用 .negate() 的方式更加 语义直观 ,代码也更具有可读性

java 复制代码
// 使用 negate()
Predicate<Collection<String>> isNotEmpty = isEmpty.negate();

// 更推荐的方式
Predicate<Collection<String>> isNotEmpty = Predicate.not(isEmpty);

🎯 总结:为什么要使用这些工厂方法?

优势 说明
✅ 可读性更高 比手动写 lambda 更直观
✅ 更符合语义 比如 isEqual() 语义就清晰表达了"相等"
✅ 更易于组合 可以与 .and().or() 等方法链式搭配

💡 小练习

试着使用 Predicate.isEqual()Predicate.not() 实现下面两个谓词:

  • 判断一个字符串是否是 "admin"
  • 判断一个字符串是否 不是 "admin"
java 复制代码
Predicate<String> isAdmin = Predicate.isEqual("admin");
Predicate<String> isNotAdmin = Predicate.not(isAdmin);
相关推荐
程序猿DD26 分钟前
OctaFuse Gateway 2.3.0:供应商粘性绑定,让缓存命中更稳定
后端
吴懿不在 不负信仰1 小时前
从jQuery谈库与框架的设计之优劣
前端·javascript·jquery
灵析表格1 小时前
灵析表格手机号处理函数深度分析报告
前端·网络·json·wps·灵析表格·excel公式盒子
乐橙开放平台1 小时前
老旧小区监控事件驱动派单:基于 setMessageCallback 的 msgType 分级与工单闭环实现
后端·物联网·音视频
智海深蓝1 小时前
智慧渔业海上养殖数字孪生实践方向与难点拆解分析
java·前端·网络
丁引1 小时前
《数据清洗的艺术:如何用20行核心逻辑优雅地删除无标签图片》
前端·数据库·python
Bigger1 小时前
Han:一个让 AI Agent 也能做出高级中国风页面的 CSS 设计系统
前端·ai编程·设计
猿长大人2 小时前
C# | MediatR 入门指南:后端架构解耦
分布式·后端·架构·c#·.net
梦想的旅途22 小时前
企业微信自动化:自动发送文本、图片、文件
前端·数据库·microsoft
人间凡尔赛2 小时前
Kubernetes十周年:从Cloud Native到AI Native的架构范式跃迁
后端·云原生·架构