首页 > 其他分享 >函数式接口:Predicate

函数式接口:Predicate

时间:2022-08-14 14:47:27浏览次数:82  
标签:Predicate return 函数 int arr 接口 static test

Predicate接口

Predicate在英文中的意思:断言。也就是对事物下判断。

抽象方法:test
// 对指定类型的数据var1使用自定义的方式判定
boolean test(T var1);

其实Predicate就是将条件语句打包成一个类,减少编程时传参的麻烦,同时使得条件语句也可以延迟执行

代码样例

public class Main {
    public static void main(String[] args) {
        int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
        test(arr, (t) -> {
            if (t > 12523) return true;
            return false;
        });
    }
    public static void test(int arr[], Predicate<Integer> pre) {
        for (int s : arr) {
            // 用pre.test(s)来代替条件语句
            if (pre.test(s)) {
                System.out.println(s);
            }
        }
    }
}

输出结果

16254
3547345
default方法:and
default Predicate<T> and(Predicate<? super T> other) {
    Objects.requireNonNull(other);
    return (t) -> {
        return this.test(t) && other.test(t);
    };
}

将当前断言与传入的断言通过短路与拼接并且生成新的断言

代码样例

public static void main(String[] args) {
    int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
    Predicate<Integer> pre1 = (t) -> {
        if (t > 12523) return true;
        return false;
    };
    Predicate<Integer> pre2 = (t) -> {
        if (t < 300000) return true;
        return false;
    };
    // 等价于 t > 12523 && t < 300000 的条件
    test(arr, pre1.and(pre2));
}
public static void test(int arr[], Predicate<Integer> pre) {
    for (int s : arr) {
        if (pre.test(s)) {
            System.out.println(s);
        }
    }
}

输出结果

16254
default方法:or
default Predicate<T> or(Predicate<? super T> other) {
    Objects.requireNonNull(other);
    return (t) -> {
        return this.test(t) || other.test(t);
    };
}

将当前断言与传入的断言通过短路或拼接并且生成新的断言

代码样例

public static void main(String[] args) {
    int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
    Predicate<Integer> pre1 = (t) -> {
        if (t > 12523) return true;
        return false;
    };
    Predicate<Integer> pre2 = (t) -> {
        if (t < 300000) return true;
        return false;
    };
    // 等价于 t > 12523 && t < 300000 的条件
    test(arr, pre1.or(pre2));
}
public static void test(int arr[], Predicate<Integer> pre) {
    for (int s : arr) {
        if (pre.test(s)) {
            System.out.println(s);
        }
    }
}

输出结果

1
23
135
534
6245
16254
3547345
default方法:negate
default Predicate<T> negate() {
    return (t) -> {
    	return !this.test(t);
    };
}

将当前断言取反并且生成新的断言

代码样例

public static void main(String[] args) {
    int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
    Predicate<Integer> pre1 = (t) -> {
        if (t < 12523) return true;
        return false;
    };
    Predicate<Integer> pre2 = (t) -> {
        if (t > 300000) return true;
        return false;
    };
    // 等价于 t > 12523 && t < 300000 的条件
    test(arr, pre1.or(pre2).negate());
}
public static void test(int arr[], Predicate<Integer> pre) {
    for (int s : arr) {
        if (pre.test(s)) {
            System.out.println(s);
        }
    }
}

输出结果

16254
static方法
static <T> Predicate<T> isEqual(Object targetRef) {
    return null == targetRef ? Objects::isNull : (object) -> {
        return targetRef.equals(object);
    };
}

static <T> Predicate<T> not(Predicate<? super T> target) {
    Objects.requireNonNull(target);
    return target.negate();
}
  • isEqual:传入一个对象,当对象引用null时,返回isNull方法引用的Predicate,否则返回equals的Predicate
  • not:返回目标Predicate的negate

标签:Predicate,return,函数,int,arr,接口,static,test
From: https://www.cnblogs.com/buzuweiqi/p/16585391.html

相关文章

  • python 中字符串格式化函数 format()
     001、>>>"{0}".format("xxx")##位置参数'xxx'>>>"{0}.{1}.{2}".format("xxx","yyy","zzz")'xxx.yyy.zzz'>>>"\t{0}.{......
  • 第7章 函数——C++的编程模块
    第7章函数——C++的编程模块7.8编程练习题第1题#include<iostream>usingnamespacestd;//编写一个程序,不断要求用户输入两个数,直到其中的一个为0.//对于两......
  • python基础之open函数和路径处理
    前言本次内容主要介绍文件处理open函数以及路径处理。一、open函数根据前面介绍的函数调用方式,调用open函数。#open函数调用open()TypeError:open()miss......
  • 小波变换第2讲:尺度函数与小波函数
    Content1尺度函数1.1Harr尺度函数1.2尺度函数构成的空间1.3尺度函数的性质1.3.1VjV_jVj​空间的正交基1.3.2嵌套子空间1.3.3交空间和并空间1.3.4尺度函数递归......
  • 实现0开销的 c++ 接口例子
    //network.hclassNetwork{public:boolsend(constchar*host,uint16_tport,conststd::string&message);staticNetw......
  • 使用LOAD_FILE()函数在MySQL数据库中插入BLOB字段的正确方法
    1.检查文件存不存在。 SELECTLOAD_FILE('C:/ProgramData/MySQL/MySQLServer8.0/Uploads/pic/11.jpg')ASRESULT;2.检查文件大小是否小于允许的最大字节。 showva......
  • C++之友元函数
    C++之友元函数某些地方可以访问,某些地方不可以访问。#include<iostream>usingnamespacestd;#include<string>classBuilding{ //让全局的好朋友函数变成类......
  • C++之常函数和常对象
    C++之常函数和常对象为了让this指向的成员属性值不可更改,在函数的实现前边加上const.voidshowInfo()const//常函数不能修改指针指向的值{ this->m_A=1000;......
  • c语言中函数声明和调用
     001、#include<stdio.h>//以下为函数定义intmax2(inta,intb)//该句称为函数头;int表示函数返回类型;max2表示函数名;inta和intb为形参声明。{if(......
  • KMP AC自动机 Z函数
    KMPAC自动机Z函数\(s_{0..n-1}\)前缀函数\(\pi_i\)最大的\(k<i\)使得\(s_{0..k-1}=s_{i-k+1..i}\)abcabcd\(\pi_0=0\)规定的\(\pi_1=0\)\(\pi_2=0\)\(\pi_3......