函数式接口-常见函数式接口-Predicate接口

常见函数式接口

JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供

Predicate接口

有时候我们需要对某种类型的数据进行判断 从而得到一个boolean值结果 这时可以使用Predicate<T>接口

抽象方法:test

Predicate接口中包含一个抽象方法

boolean test(T t):用来指定数据类型数据进行判断的方法

结果:

符合条件,返回true

不符合条件,返回false

复制代码
public class BPredicate {
    //// 判断给定的字符串是否满足要求
    public static boolean checkString(String s, Predicate<String> pre){
        return pre.test(s);
    }

    public static void main(String[] args) {
        String s= "abcde";
//        boolean b = checkString(s, (String str)->{
//            return str.length()>5;
//        });
//        System.out.println(b);
        //优化Lambda表达式
        boolean b = checkString(s, str->str.length()>5);
        System.out.println(b);
    }
}
复制代码

默认方法:and

既然是条件判断 就会存在与、或、非三种常见的逻辑关系 其中将两个Predicate条件使用与“逻辑连接起来实现”并且的效果 可以使用default方法and

逻辑表达式:可以连接多个判断的条件

&&:与运算符,有false则false

||:或运算符 有true则true

!:非(取反)运算符 非真则假 非假则真

需求:判断一个字符串 有两个判断的条件

1.判断字符串的长度是否大于5

2.判断字符串中是包含a

两个添加必须同时满足 我们就可以使用&&运算符链接两个条件

复制代码
public class BPredicate1 {
    /*
         需求:判断一个字符串 有两个判断的条件
            1.判断字符串的长度是否大于5
            2.判断字符串中是包含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);//相当于return pre1.test(s) && pre2.test(s);
    }

    public static void main(String[] args) {
        //定义一个字符串
        String s = "abcdefj";
        //调用checkString方法,参数传递字符串和两个Lambda表达式
        boolean le = checkString(s, (String str)->{
            return str.length()>9;
        },(String str)->{
            return  str.contains("a");
        });
        System.out.println(le);
    }
}
复制代码

默认方法:or

与and的“与”类似 默认方法or实现逻辑关系中的“或”

需求:判断一个字符串 有两个判断的条件

1.判断字符串的长度是否大于5

2.判断字符串中包含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 = "abcdefj";
        //调用checkString方法,参数传递字符串和两个Lambda表达式
        boolean le = checkString(s, (String str)->{
            return str.length()>9;
        },(String str)->{
            return  str.contains("a");
        });
        System.out.println(le);
    }
复制代码

运行结果:

 默认方法:negate

与、或已经了解了 剩下的“非”(取反)也会简单

需求:判断一个字符串长度是否大于5

如果字符串的长度大于5 那返回false

如果字符串的长度大于5 那么返回true

所以我们可以使用取反符号 对判断的结果进行取反

代码:

 

复制代码
public class BPredicate2 {
    /*
        定义一个方法 方法的参数 传递一个字符串
        使用Predicate接口判断字符串的长度是否大于5
    */
    public static boolean menth(String s, Predicate<String> pro){
        return !pro.negate().test(s);
    }

    public static void main(String[] args) {
        //定义一个字符串
        String s = "abcdefj";
        //调用checkString方法 参数传递字符串和两个Lambda表达式
        boolean lm = menth(s, (String str)->{
            return str.length()>5;
        });
        System.out.println(lm);//这次长度并没有大于5所以最后的结果是true
    }
}
复制代码

 

posted @   monkey大佬  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示