Java 常用函數式接口案例之Predicate接口

1.Predicate接口說明

java.util.function.Predicate<T>接口
作用:對某種數據類型的數據進行判斷,結果返回一個boolean
Predicate接口中包含了一個抽象方法
     boolean test(T t);應用該方法對某種數據類型的數據進行判斷,符合條件則返回true,不符合則返回false
默認方法
     (1)and();與運算,判斷一個字符串中是否既含有a,又含有b;
         源碼:
         default Predicate<T> and(Predicate<? super T> other) {
            Objects.requireNonNull(other);
            return (t) -> test(t) && other.test(t);
         }
     (2)or();或運算
         源碼:
         default Predicate<T> or(Predicate<? super T> other) {
             Objects.requireNonNull(other);
              return (t) -> test(t) || other.test(t);
         }
     (3)negate();取反運算
         源碼:
         default Predicate<T> negate() {
             return (t) -> !test(t);
         }

案例1:

    /*
    定義一個方法,參數傳遞String類型的字符串,傳遞一個Predicate接口,泛型使用String
    使用該接口中的test方法對字符串進行判斷,並將判斷結果返回
     */
    public static boolean checkString(String str, Predicate<String> pre){
        return pre.test(str);
    }

    public static void main(String[] args) {
        String str = "AA";
        *//*boolean result = checkString(str, new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length()>5;
            }
        });*/
        boolean result = checkString(str,s -> s.length()>5);
        System.out.println(result);
    }

案例2:

//判斷一個字符串是否既含有a,長度又大於5
    public static boolean method(String str, Predicate<String> pre1,Predicate<String> pre2){
        //return pre1.test(str) && pre2.test(str);
        return pre1.and(pre2).test(str);
    }

    public static void main(String[] args) {
        String str="axwertggwhwt";
      /*  boolean result = method(str, new Predicate<String>() {
                    @Override
                    public boolean test(String s) {
                        return str.contains("a");
                    }
                },
                new Predicate<String>() {
                    @Override
                    public boolean test(String s) {
                        return str.length()>5;
                    }
         });*/
        boolean result = method(str,s->str.contains("z"),s->str.length()>5);
        System.out.println(result);
    }

案例3:

    //判斷一個字符串的長度是否大於5,大於返回false,否則返回true
    public static boolean method(String str, Predicate<String> pre){
        //return !pre.test(str);
        return pre.negate().test(str);
    }

    public static void main(String[] args) {
        String str = "AA";
        boolean result = method(str,s -> s.length()>5);
        System.out.println(result);
    }

案例4:

//判斷一個字符串的姓名長度是否大於4,且性別爲女,並將符合條件的字符串存入ArrayList中
    public static boolean method(String strs, Predicate<String> pre1, Predicate<String> pre2){
        return pre1.and(pre2).test(strs);
    }

    public static void main(String[] args) {
        String[] arrs = {"AAAAA,男","BBBBBB,女","CC,男","DDDDDDD,女"};
        ArrayList<String> list = new ArrayList<>();
        for (String arr : arrs) {
            boolean result = method(arr,s->s.split(",")[0].length()>4,s->s.split(",")[1].equals("女"));
            if(result){
                list.add(arr);
            }
        }

        System.out.println(list.toString());
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章