JDK8新特性-java.util.function-Predicate接口
上篇主要对Function函数进行了简单了解,本篇则主要了解Predicate。该函数的主要作用其实就是判定输入的对象是否否和某个条件,然后将其布尔值返回。
主要使用方法如下:
//唯一的抽象方法
boolean test(T t);
//且操作,既满足A也满足B条件
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
//取反操作 为true则返回false
default Predicate<T> negate() {
return (t) -> !test(t);
}
//或操作,满足A条件或者满足B条件
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);
}
除了test()抽象方法以及一个静态方法以外,其他的都是默认方法,可以存在多个默认方法以及静态方法。
实践操作如下:
public static void main(String[] args) {
Predicate<Integer> biggerThan6 = x -> x > 6;
Predicate<Integer> lessThan3 = x -> x < 3;
Predicate<Integer> lessThan9 = x -> x < 9;
//7比6大为true,为false
System.out.println("negate value=" + biggerThan6.negate().test(7));
//7比6大为true
System.out.println("test() value=" + biggerThan6.test(7));
//8比6大且比9小
System.out.println("and value=" + biggerThan6.and(lessThan9).test(8));
//1比3小,满足一种条件
System.out.println("or value=" + biggerThan6.or(lessThan3).test(1));
//静态方法,判定是否相等
System.out.println("isEqual false value=" + Predicate.isEqual("test").test("num"));
System.out.println("isEqual true value=" + Predicate.isEqual("num").test("num"));
}
返回值:
negate value=false
test() value=true
and value=true
or value=true
isEqual false value=false
isEqual true value=true
大多数标准的函数式接口都拥有用来生成或组合函数的非抽象方法。例如Predicate.isEqual(“test”)同”test”.equals一样(”test”位置的值不为null).
使用方式很简单,下篇则介绍剩余的几个常用函数式接口。