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

浙公网安备 33010602011771号