函数式接口-常见函数式接口-Predicate接口
常见函数式接口
JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供
Predicate接口
有时候我们需要对某种类型的数据进行判断 从而得到一个boolean值结果 这时可以使用Predicate<T>接口
抽象方法:test
Predicate接口中包含一个抽象方法
boolean test(T t):用来指定数据类型数据进行判断的方法
结果:
符合条件,返回true
不符合条件,返回false
public class Demo01Predicate {
    /*
    定义一个方法
    参数传递一个String类型的字符串
    传递一个Predicate接口 泛型使用String
    使用Predicate中的方法test对字符串进行判断 并把判断的结果返回
     */
    public static boolean checkString(String s, Predicate<String> pre){
        return pre.test(s);
    }
    public static void main(String[] args) {
        //定义一个字符串
        String s="abcdef";
        //调用checkString方法对字符串进行校验 参数传递字符串和Lambda表达式
        boolean b = checkString(s, (String str) -> {
            return str.length()>5;
        });
        System.out.println(b);
    }
}
默认方法:and
既然是条件判断 就会存在与、或、非三种常见的逻辑关系 其中将两个Predicate条件使用与“逻辑连接起来实现”并且的效果 可以使用default方法and
逻辑表达式:可以连接多个判断的条件
&&:与运算符,有false则false
||:或运算符 有true则true
!:非(取反)运算符 非真则假 非假则真
需求:判断一个字符串 有两个判断的条件
1.判断字符串的长度是否大于5
2.判断字符串中是包含a
两个添加必须同时满足 我们就可以使用&&运算符链接两个条件
public class Demo08Predicate {
    /*
    定义一个方法 方法的参数 传递一个字符串
    传递两个Predicate接口
    一个用于判断字符串的长度是否大于5
    一个用于判断字符串是包含a
    两个条件必须同时满足
     */
    public static boolean checkString(String s, Predicate<String> pre1,Predicate<String> pre2){
        //两种判断形式
        //return pre1.test(s)&&pre2.test(s);
        return pre1.and(pre2).test(s);
    }
    public static void main(String[] args) {
        //定义一个字符串
        String s="abcdef";
        //调用checkString方法 参数传递字符串和两个Lambda表达式
        boolean a = checkString(s, (String str) -> {
            return s.length() > 5;
        }, (String str) -> {
            return s.contains("a");
        });
        System.out.println(a);
    }
}
默认方法:or
与and的“与”类似 默认方法or实现逻辑关系中的“或”
需求:判断一个字符串 有两个判断的条件
1.判断字符串的长度是否大于5
2.判断字符串中包含a
满足一个条件即可 我们就可以使用||运算符连接两个条件
public class Demo03Predicate {
    /*
    定义一个方法 方法的参数 传递一个字符串
    传递两个Preadicate接口
    一个用于判断字符串的长度是否大于5
    一个用于判断字符是否包含a
    满足一个条件即可
     */
    public static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) {
        return pre1.test(s) || pre2.test(s);
    }
    public static void main(String[] args) {
        //定义一个字符串
        String s = "abcde";
        //调用checkString方法 参数传递字符串和两个Lambda表达式
        boolean a = checkString(s, (String str) -> {
            return s.length() > 5;
        }, (String str) -> {
            return s.contains("a");
        });
        System.out.println(a);//这次长度并没有大于5 当时包含a所以最后的结果是true
    }
}
运行结果:

第二种方式:
 public static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) {
        return pre1.or(pre2).test(s);
    }
    public static void main(String[] args) {
        //定义一个字符串
        String s = "abcde";
        //调用checkString方法 参数传递字符串和两个Lambda表达式
        boolean a = checkString(s, (String str) -> {
            return s.length() > 5;
        }, (String str) -> {
            return s.contains("a");
        });
        System.out.println(a);//这次长度并没有大于5 当时包含a所以最后的结果是true
    }
运行结果:

默认方法:negate
与、或已经了解了 剩下的“非”(取反)也会简单
需求:判断一个字符串长度是否大于5
如果字符串的长度大于5 那返回false
如果字符串的长度大于5 那么返回true
所以我们可以使用取反符号 对判断的结果进行取反
代码:
public class Demo04Predicate {
    /*
    定义一个方法 方法的参数 传递一个字符串
    使用Predicate接口判断字符串的长度是否大于5
     */
    public static boolean checkString(String s, Predicate<String> pre1) {
        return pre1.negate().test(s);
    }
    public static void main(String[] args) {
        //定义一个字符串
        String s = "abcde";
        //调用checkString方法 参数传递字符串和两个Lambda表达式
        boolean a = checkString(s, (String str) -> {
            return s.length() > 5;
        });
        System.out.println(a);//这次长度并没有大于5所以最后的结果是true
    }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号