Predicate函数式接口

Predicate接口主要用于流的筛选,好比在filter方法中传入Predicate判断。函数

做为函数式接口,这里竟然有三个default方法,一个static方法,子孙满堂!3d

正统的接口方法,就是boolean test​(T t),接受一个泛型T,若是输入参数与谓词匹配,则返回true,不然返回false。对象

先来看看静态相等判断方法,static <T> Predicate<T> isEqual​(Object targetRef)blog

这里判断对象是否相等,结合是否为空的处理,这里用了 Objects::isNull 和object.equals的方法。接口

再来看看默认or方法,default Predicate<T> or​(Predicate<? super T> other)ip

返回一个组合谓词,表示此谓词与另外一个谓词的短路逻辑OR。在评估组合谓词时,若是此谓词为true,则不评估其余谓词。rem

这里就要求如参不能为null。get

default Predicate<T> negate​()  返回表示此谓词的逻辑否认的谓词。io

那么这个也很好理解了,就是与操做,default Predicate<T> and​(Predicate<? super T> other)test

洗个简单的使用demo:

输出:

还有IntPredicate,DoublePredicate,LongPredicate,比较特别一点的就是Bipredicate,有两个泛型类型参数

就像这样,是否是就容易理解多啦。

在流的不少方法中,都使用了Predicate接口做为参数判断!好比下面的 Collection.removeIf