上篇主要对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则返回falsedefault 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,为falseSystem.out.println("negate value=" + biggerThan6.negate().test(7));//7比6大为trueSystem.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).
使用方式很简单,下篇则介绍剩余的几个常用函数式接口。