JDK8新特性-Predicate 介面
阿新 • • 發佈:2020-12-14
概述
- JDK8 提供的函式式介面
- 提供一個抽象方法test, 接受一個引數, 根據這個引數進行一些判斷, 返回判斷結果 true / false
- 提供幾個預設的default方法, and, or, negate 用於進行組合判斷
- 在流中被廣泛使用
FunctionalInterface public interface Predicate<T> { /** * 具體過濾操作 需要被子類實現. * 用來處理引數T是否滿足要求,可以理解為 條件A */ boolean test(T t); /** * 呼叫當前Predicate的test方法之後再去呼叫other的test方法,相當於進行兩次判斷 * 可理解為 條件A && 條件B*/ default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) && other.test(t); } /** * 對當前判斷進行"!"操作,即取非操作,可理解為 ! 條件A */ default 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); } /** * 對當前操作進行"="操作,即取等操作,可以理解為 A == B */ static <T> Predicate<T> isEqual(Object targetRef) {return (null == targetRef) ? Objects::isNull : object -> targetRef.equals(object); } }
常規示例:
public static void main(String[] args) { /** * 1、判斷數字是否大於7 */ //設定一個大於7的過濾條件 Predicate<Integer> predicate = x -> x > 7; System.out.println(predicate.test(10)); //輸出 true System.out.println(predicate.test(6)); //輸出 fasle /** * 2、大於7並且 */ //在上面大於7的條件下,新增是偶數的條件 predicate = predicate.and(x -> x % 2 == 0); System.out.println(predicate.test(6)); //輸出 fasle System.out.println(predicate.test(12)); //輸出 true System.out.println(predicate.test(13)); //輸出 fasle /** * 3、add or 簡化寫法 */ predicate = x -> x > 5 && x < 9; System.out.println(predicate.test(10)); //輸出 false System.out.println(predicate.test(6)); //輸出 true }