首页 > 其他分享 >函数式接口-常见函数式接口-Predicate接口

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

时间:2022-10-17 17:24:51浏览次数:33  
标签:Predicate return 函数 接口 checkString 字符串 public String

常见函数式接口

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

    }


}
复制代码

 

标签:Predicate,return,函数,接口,checkString,字符串,public,String
From: https://www.cnblogs.com/shenziyi/p/16798498.html

相关文章

  • 函数式接口-常见函数式接口-Consumer接口
    常见函数式接口JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见它们注意在java.util.function包中被提供Consumer接口Consumer<T>接口则正好与Supplier接口......
  • 函数式接口-常见函数式接口-Supplier接口
    常见函数式接口JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见它们注意在java.util.function包中被提供Supplier接口Supplier<T>接口仅包含一个无参的方......
  • 持续集成下接口自动化测试实践
    目前很多持续集成项目都需要执行接口层的测试,当你了解其基本概念,理解了接口协议、如何传参、测试原理后,无需掌握程序语言,使用行业内成熟的接口测试工具,就可以快速地......
  • js 外部调用 嵌套函数
     在函外部直接调用函数的内部函数是不可以的,因为是向外查找的 所以不能直接内部函数  functionone(){functiontwo(){varb=30;......
  • C语言零基础入门—函数-习题
    C语言零基础入门—函数-习题本节课的任务是:完成5道习题。下边的题目,都需要使用函数的知识来求解(也就是编写自定义函数求解)01-二元一次函数求解求方程​​ax^2+bx+c=......
  • Java中正则表达式使用以及asPredicate结合集合与lambda的使用(筛选字符串集合哪些符合
    场景Java支持正则表达式,正则表达式表示的是用于扫描和匹配文本的搜索模式。java中使用Pattern类(java.util.regex包中)表示正则表达式,但是,此类不能直接实例化,只能使用静......
  • mysql 中使用 CONCAT 函数进行结果拼接时出现乱码问题
    今天在mysql中使用CONCAT()函数进行结果拼接时出现了乱码问题,如下图所示:  后来发现是因为不同类型的字段进行拼接造成的应使用convert()函数进行类型转换,把非字......
  • ctfshow web99(in_array函数漏洞)
    <?phphighlight_file(__FILE__);$allow=array();//设置为数组for($i=36;$i<0x36d;$i++){array_push($allow,rand(1,$i));//向数组里面插入随机数}if(isset......
  • python中的range()函数
    range()函数:用于生成一个整数序列; range()的三种创建方式: 第一种:只有一个参数(小括号中只给了一个数)即range(stop)  例如:range(10)指的是默认从0开始,步长为1,不包括10......
  • 数仓性能调优:如何进行函数下推
    摘要:本文主要描述下函数在满足特征的前提下可以把函数属性定义为下推属性。本文分享自华为云社区《GaussDB(DWS)性能调优:函数下推》,作者:譡里个檔。DWS作为MPP架构的数仓......