先看这个接口的test方法是返回一个boolean型。and negate or方法最后都调用test方法。
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
default Predicate<T> negate() {
return (t) -> !test(t);
}
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
}
-
boolean test(T t);
//设置一个大于7的过滤条件 Predicate<Integer> predicate = x -> x > 7; //输出 true System.out.println(predicate.test(10));
-
default Predicate<T> and(Predicate<? super T> other),可理解为 条件A && 条件B
调用当前Predicate的test方法之后再去调用other的test方法,相当于进行两次判断
//在上面大于7的条件下,添加是偶数的条件 predicate = predicate.and(x -> x % 2 == 0); //输出 fasle System.out.println(predicate.test(6));
-
default Predicate<T> negate()
对当前判断进行"!"操作,即取非操作,可理解为 ! 条件A
Predicate<Integer> predicate = x -> x > 7; //输出 fasle 对predicate的条件取非 System.out.println("ddddd:"+predicate.negate().test(10));
-
default Predicate<T> or(Predicate<? super T> other)
对当前判断进行"||"操作,即取或操作,可以理解为 条件A ||条件B
//设置一个大于7的过滤条件 Predicate<Integer> predicate = x -> x > 7; Predicate<Integer> predicate2 = x -> x < 9; //输出 fasle 对predicate的条件取非 System.out.println("对predicate的条件取非:"+predicate.negate().test(10)); //输出 true 对predicate和predicate1的条件取或者 System.out.println("对predicate和predicate1的条件取或 者:"+predicate.or(predicate2).test(10));
-
static <T> Predicate<T> isEqual(Object targetRef)
对当前操作进行"="操作,即取等操作,可以理解为 A == B
//输出 true isEqual System.out.println("isEqual:" +Predicate.isEqual(new User(21,"zhangsan")).test(new User(21,"zhangsan")));