文章目录
- [161. Java Lambda 表达式 - 使用工厂方法创建 Predicates](#161. Java Lambda 表达式 - 使用工厂方法创建 Predicates)
-
-
- [🎯 Predicate 工厂方法概览](#🎯 Predicate 工厂方法概览)
- [🧪 示例一:`Predicate.isEqual()` 工厂方法](#🧪 示例一:
Predicate.isEqual()工厂方法) - [🧪 示例二:`Predicate.not()` 工厂方法(`Java 11+`)](#🧪 示例二:
Predicate.not()工厂方法(Java 11+)) - [🎯 总结:为什么要使用这些工厂方法?](#🎯 总结:为什么要使用这些工厂方法?)
- [💡 小练习](#💡 小练习)
-
161. Java Lambda 表达式 - 使用工厂方法创建 Predicates
在 Java 8+ 中,Predicate<T> 接口除了可以通过 lambda 表达式和方法引用创建,还提供了 工厂方法(Factory Methods) 来进一步提升代码的可读性和表现力。
🎯 Predicate 工厂方法概览
| 方法 | 说明 |
|---|---|
Predicate.isEqual(Object targetRef) |
返回一个用于判断"是否等于某个对象"的Predicate |
Predicate.not(Predicate<T> predicate) |
返回一个"否定"现有Predicate的Predicate(从 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);