Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值。
接口定义
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
它接收泛型T的输入,返回true或false。
Predicate接口通常用来:
1. 过滤集合中的元素。像List#removeIf()、Stream#filter()等方法接收Predicate来过滤元素。
2. 判断对象是否满足某条件,作为if语句的判断条件。
3. 验证对象的一些属性或状态是否正确。
4. 自定义复杂的判断逻辑作为方法的参数。Predicate的使用者无需了解判断逻辑的具体实现细节。
示例代码:
// Remove persons older than 18
list.removeIf(person -> person.age > 18);
// Check if "Hello" starts with "H"
if (startsWith("H")) { ... }
Predicate<String> startsWithH = s -> s.startsWith("H");
// Check if person has empty name
Predicate<Person> nameNotEmpty = person -> !person.name.isEmpty();
// Use Predicate to filter candidates
selectCandidates(candidates, candidate -> candidate.age > 30 &&
candidate.skills.contains("Java"));