1. 程式人生 > 實用技巧 >JDK8新特性-Predicate 介面

JDK8新特性-Predicate 介面

概述

  • 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
    }