Predicate.test()
Predicate.test() 是 Java 中 java.util.function.Predicate 接口的一個方法。Predicate 是一個函數式接口,通常用于表示一個布爾值函數(即返回 true 或 false 的函數)。test() 方法是該接口的核心方法,用于對給定的輸入進行條件判斷。
方法簽名
boolean test(T t);
-
參數:
t:需要測試的對象,類型為泛型T。
-
返回值:
- 返回一個布爾值 (
true或false),表示輸入對象是否滿足Predicate定義的條件。
- 返回一個布爾值 (
使用場景
Predicate 和 test() 方法通常用于過濾、條件判斷等場景,尤其是在集合操作中結合流(Stream API)使用。
示例代碼
1. 基本用法
import java.util.function.Predicate;
public class PredicateTestExample {
public static void main(String[] args) {
// 定義一個 Predicate,判斷字符串是否為空
Predicate<String> isNotEmpty = str -> str != null && !str.isEmpty();
// 測試字符串
System.out.println(isNotEmpty.test("Hello")); // 輸出: true
System.out.println(isNotEmpty.test("")); // 輸出: false
System.out.println(isNotEmpty.test(null)); // 輸出: false
}
}
2. 結合 Stream API 使用
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class PredicateStreamExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "", "Charlie", null);
// 定義一個 Predicate,判斷字符串是否非空且非 null
Predicate<String> isValidName = name -> name != null && !name.isEmpty();
// 使用 Stream API 過濾無效的名字
List<String> validNames = names.stream()
.filter(isValidName)
.collect(Collectors.toList());
System.out.println(validNames); // 輸出: [Alice, Bob, Charlie]
}
}
3. 組合多個 Predicate
Predicate 提供了 and()、or() 和 negate() 方法,可以組合多個條件。
import java.util.function.Predicate;
public class PredicateCombinationExample {
public static void main(String[] args) {
Predicate<Integer> isEven = num -> num % 2 == 0;
Predicate<Integer> isPositive = num -> num > 0;
// 組合條件:數字既是偶數又是正數
Predicate<Integer> isEvenAndPositive = isEven.and(isPositive);
System.out.println(isEvenAndPositive.test(4)); // 輸出: true
System.out.println(isEvenAndPositive.test(-2)); // 輸出: false
System.out.println(isEvenAndPositive.test(3)); // 輸出: false
}
}
總結
Predicate.test()是一個非常有用的工具方法,適用于各種條件判斷場景。- 它常與 Java 8 引入的 Stream API 配合使用,能夠簡化代碼邏輯并提高可讀性。
- 通過
and()、or()和negate()方法,可以靈活地組合復雜的條件邏輯。
如果需要進一步了解或有其他相關問題,請隨時告訴我!
本文來自博客園,作者:chuangzhou,轉載請注明原文鏈接:http://www.rzrgm.cn/czzz/p/18824169

浙公網安備 33010602011771號