Predicate函式式介面
阿新 • • 發佈:2018-12-12
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