天天看點

【jdk1.8特性】之Predicate

Predicate簡介:

        Predicate是一個功能性的接口,其功能是判斷某個參數是否滿足表達式。相似的還有BiPredicate<T, U>(使用 test(T t, U u)方法,判斷參數t、u是否滿足BiPredicate執行個體所代表的表達式);DoublePredicate(對于基本資料類型double的Predicate);LongPredicate(對于基本資料類型int的Predicate);IntPredicate(對于基本資料類型long的Predicate)。

注:本文主要學習Predicate,學會了Predicate,那麼自然就學會了BiPredicate<T, U>、DoublePredicate、

        IntPredicate、LongPredicate。

Predicate學習:

  • test(T t):判斷t,是否滿足Predicate執行個體所代表的表達式。
/**
 * test(T t): 判斷t,是否滿足Predicate執行個體所代表的表達式
 */
@Test
public void test1() {

    // 形參x的資料類型,由Predicate<T>的泛型T指定
    // 定義一個 用于判斷的表達式(這裡為 x >= 1)
    Predicate<Integer> predicate = x -> x >= 1;

    // 判斷參數是否滿足 predicate代表的表達式
    boolean resultOne = predicate.test(0);
    boolean resultTwo = predicate.test(1);

    // 輸出結果為: false
    System.out.println(resultOne);
    // 輸出結果為: true
    System.out.println(resultTwo);
}
           

運作測試類,控制台輸出:

【jdk1.8特性】之Predicate
  • isEqual(Object targetRef):判斷targetRef,是否與Predicate執行個體所代表的對象相等。
/**
 * isEqual(Object targetRef): 判斷targetRef,是否與Predicate執行個體所代表的對象相等
 */
@Test
public void test2() {

    /*
     * 等價于:
     *  Predicate<Object> predicate = x -> {
     *      if (x == objA) {
     *         return true;
     *      }
     *      return x.equals(objA);
     *  };
     */
    Object objA = new Object();
    Predicate<Object> predicate = Predicate.isEqual(objA);


    // 判斷參數是否滿足 predicate代表的表達式
    boolean resultOne = predicate.test(objA);
    boolean resultTwo = predicate.test(null);
    boolean resultThree = predicate.test(new Object());

    // 輸出結果為: true
    System.out.println(resultOne);
    // 輸出結果為: false
    System.out.println(resultTwo);
    // 輸出結果為: false
    System.out.println(resultThree);
}
           

運作測試類,控制台輸出:

【jdk1.8特性】之Predicate
  • and(Predicate<? super T> other):對兩個Predicate執行個體取&&,得到新的Predicate執行個體。
/**
 * and(Predicate<? super T> other): 對兩個Predicate執行個體取&&,得到新的Predicate執行個體
 */
@Test
public void test3() {

    // 定義兩個 用于判斷的表達式
    Predicate<Integer> predicateOne = x -> x >= 1;
    Predicate<Integer> predicateTwo = x -> x <= 2;

    /*
     * 對兩個表達式取 &&
     *
     * 等價于:Predicate<Integer> predicateThree = x -> x >= 1 && x <= 2;
     */
    Predicate<Integer> predicateThree = predicateOne.and(predicateTwo);

    // 判斷參數是否滿足 predicateThree代表的表達式
    boolean resultOne = predicateThree.test(0);
    boolean resultTwo = predicateThree.test(1);
    boolean resultThree = predicateThree.test(2);
    boolean resultFour = predicateThree.test(3);

    // 輸出結果為: false
    System.out.println(resultOne);
    // 輸出結果為: true
    System.out.println(resultTwo);
    // 輸出結果為: true
    System.out.println(resultThree);
    // 輸出結果為: false
    System.out.println(resultFour);
}
           

運作測試類,控制台輸出:

【jdk1.8特性】之Predicate
  • or(Predicate<? super T> other):對兩個Predicate執行個體取||,得到新的Predicate執行個體。
/**
 * or(Predicate<? super T> other): 對兩個Predicate執行個體取||,得到新的Predicate執行個體
 */
@Test
public void test4() {

    // 定義兩個 用于判斷的表達式
    Predicate<Integer> predicateOne = x -> x >= 1;
    Predicate<Integer> predicateTwo = x -> x <= -1;

    /*
     * 對兩個表達式取 ||
     *
     * 等價于:Predicate<Integer> predicateThree = x -> x >= 1 || x <= -1;
     */
    Predicate<Integer> predicateThree = predicateOne.or(predicateTwo);

    // 判斷參數是否滿足 predicateThree代表的表達式
    boolean resultOne = predicateThree.test(-2);
    boolean resultTwo = predicateThree.test(-1);
    boolean resultThree = predicateThree.test(0);
    boolean resultFour = predicateThree.test(1);
    boolean resultFive = predicateThree.test(2);

    // 輸出結果為: true
    System.out.println(resultOne);
    // 輸出結果為: true
    System.out.println(resultTwo);
    // 輸出結果為: false
    System.out.println(resultThree);
    // 輸出結果為: true
    System.out.println(resultFour);
    // 輸出結果為: true
    System.out.println(resultFive);
}
           

運作測試類,控制台輸出:

【jdk1.8特性】之Predicate
  • negate():對目前Predicate執行個體取!,得到新的Predicate執行個體。
/**
 * negate(): 對目前Predicate執行個體取!,得到新的Predicate執行個體
 */
@Test
public void test5() {

    // 定義兩個 用于判斷的表達式
    Predicate<Integer> predicateOne = x -> x >= 1;

    /*
     * 等價于:Predicate<Integer> predicate = x -> !(x >= 1);
     * 等價于:Predicate<Integer> predicate = x -> x < 1;
     */
    Predicate<Integer> predicate = predicateOne.negate();

    // 判斷參數是否滿足 predicateThree代表的表達式
    boolean resultOne = predicate.test(0);
    boolean resultTwo = predicate.test(1);
    boolean resultThree = predicate.test(2);

    // 輸出結果為: true
    System.out.println(resultOne);
    // 輸出結果為: false
    System.out.println(resultTwo);
    // 輸出結果為: false
    System.out.println(resultThree);
}
           

運作測試類,控制台輸出:

【jdk1.8特性】之Predicate

Predicate學習完畢!

^_^ 如有不當之處,歡迎指正

^_^ 參考連結

               https://www.jianshu.com/p/b38ff80e3039

^_^ 參考文檔

              《jdk api 1.8_google.CHM》

^_^ 測試代碼托管連結

               https://github.com/JustryDeng…Jdk8Feature

^_^ 本文已經被收錄進《程式員成長筆記(五)》,筆者JustryDeng

繼續閱讀