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,转载请注明原文链接:https://www.cnblogs.com/czzz/p/18824169