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