文章目錄
- 161. Java Lambda 表達式 - 使用工廠方法創建 Predicates
- 🎯 Predicate 工廠方法概覽
- 🧪 示例一:`Predicate.isEqual()` 工廠方法
- 🧪 示例二:`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()
工廠方法
Predicate<String> isEqualToDuke = Predicate.isEqual("Duke");
? 這個謂詞的含義是:當輸入的字符串等于 "Duke"
時,返回 true
。
等價于傳統的寫法:
Predicate<String> isEqualToDuke = s -> "Duke".equals(s);
🔍 用途:可用于對象比較判斷,如字符串、枚舉、標識符等。
🧪 示例二:Predicate.not()
工廠方法(Java 11+
)
我們先來一個簡單的“判斷集合是否為空”的謂詞:
Predicate<Collection<String>> isEmpty = Collection::isEmpty;
如果我們要判斷“集合不是空的”,可以使用 not()
:
Predicate<Collection<String>> isNotEmpty = Predicate.not(isEmpty);
這樣相比使用 .negate()
的方式更加 語義直觀,代碼也更具有可讀性:
// 使用 negate()
Predicate<Collection<String>> isNotEmpty = isEmpty.negate();// 更推薦的方式
Predicate<Collection<String>> isNotEmpty = Predicate.not(isEmpty);
🎯 總結:為什么要使用這些工廠方法?
優勢 | 說明 |
---|---|
? 可讀性更高 | 比手動寫 lambda 更直觀 |
? 更符合語義 | 比如 isEqual() 語義就清晰表達了“相等” |
? 更易于組合 | 可以與 .and() 、.or() 等方法鏈式搭配 |
💡 小練習
試著使用 Predicate.isEqual()
和 Predicate.not()
實現下面兩個謂詞:
- 判斷一個字符串是否是
"admin"
; - 判斷一個字符串是否 不是
"admin"
。
Predicate<String> isAdmin = Predicate.isEqual("admin");
Predicate<String> isNotAdmin = Predicate.not(isAdmin);