Predicate函数式接口

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

作为函数式接口,这里居然有三个default方法,一个static方法,子孙满堂!

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

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

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

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

返回一个组合谓词,表示此谓词与另一个谓词的短路逻辑OR。在评估组合谓词时,如果此谓词为true,则不评估其他谓词。

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

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

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

洗个简单的使用demo:

输出:

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

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

在流的很多方法中,都使用了Predicate接口作为参数判断!比如下面的 Collection.removeIf

猜你喜欢

转载自my.oschina.net/u/2277632/blog/2987654