Java 谓词

原文:https://www.studytonight.com/java-8/java-predicate

在 Java 中,谓词是一个位于 java.util.function 包中的接口。在Lambda 表达式功能界面中用作赋值目标。

换句话说,我们可以说它代表一个布尔值函数,该函数返回真或假的布尔值。

它提高了代码的可管理性,并包含一些方法,如 test(),isEqual(),和(),或(),等。

我们希望,你有 Java lambda 表达式和函数接口的想法,因为这个话题是相互关联的,否则我们推荐你先从我们的技术门户阅读 lambda 表达式函数接口

申报

@FunctionalInterface public interface Predicate<T>

谓词方法

下表包含Predicate接口的方法。它包含单个抽象方法 test()和其他默认静态方法。

|

方法

|

描述

| | 布尔测试 | 它根据给定的参数计算这个谓词。 | | 默认谓词和(谓词 super T>其他) | 它返回一个复合谓词,表示这个谓词和另一个谓词的短路逻辑“与”。评估组合谓词时,如果此谓词为假,则不评估另一个谓词。 | | 默认谓词求反() | 它返回一个谓词,表示该谓词的逻辑否定。 | | 默认谓词或(谓词 super T>其他) | 它返回一个复合谓词,表示这个谓词和另一个谓词的短路逻辑或。评估组合谓词时,如果该谓词为真,则不评估另一个谓词。 | | 静态谓词是等价的(对象目标引用)</t> | 它返回一个谓词,根据 Objects.equals(Object,Object)测试两个参数是否相等。 |

示例:

让我们举一个例子,通过使用预定义的 test()方法来分配 lambda 表达式并调用。因为谓词是一个函数接口,所以它可以用 lambda 表达式来表示。这里,我们有两个 lambda 表达式,第一个接受字符串参数,第二个接受整数值。

import java.util.function.Predicate;
public class Main {
    public static void main(String[] args){
        Predicate <String> pr = a -> (a == "India");
        Predicate <Integer> pr2 = a -> (a > 21);
        boolean b = pr.test("India");
        System.out.println(b);
        b = pr2.test(20);
        System.out.println(b);
    }
}

真 假

示例:使用谓词过滤集合

让我们举另一个例子,其中我们使用filter()方法过滤数据列表。filter()方法属于 stream,以a Predicate为自变量。所以在这里,我们传递一个谓词作为 lambda 表达式来过滤元素。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
    public static void main(String[] args){
        List<Integer> list = Arrays.asList(10, 20, 30, 40, 50, 60, 70, 80, 90, 100);
        // Predicate in filter() method
        list = list.stream().filter(n->n>60).collect(Collectors.toList());
        System.out.println(list);
    }
}

【70、80、90、100】

示例:谓词作为方法引用

因为谓词是一个函数式接口,所以我们也可以用它来引用一个方法,这个方法叫做方法引用。要了解方法引用,请阅读我们在 Java 方法引用上的帖子。

import java.util.function.Predicate;
public class Main {

    static boolean isEligible(int age) {
        if(age>=18)
            return true;
        return false;
    }

    public static void main(String[] args){
        Predicate <Integer> voter = Main::isEligible;
        System.out.println(voter.test(16));
    }
}

示例:isEqual()方法

Predicate接口的静态方法,用于测试两个对象的相等性。对象可以是字符串、整数或类对象。请看下面的例子。

import java.util.function.Predicate;
public class Main {

    public static void main(String[] args){
        Predicate <String> isEqual = Predicate.isEqual("Studytonight");
        System.out.println(isEqual.test("Studytonight"));
        System.out.println(isEqual.test("india"));
    }
}

真 假

示例:And()方法

此方法用于组成两个 lambda 表达式,表示该谓词的短路逻辑“与”。我们可以通过组合两个 lambda 表达式来使用它执行逻辑运算。请看下面的例子。这里,我们使用 and()方法来检查一个数字是否位于两个数字范围之间。

import java.util.function.Predicate;
public class Main {

    public static void main(String[] args){
        Predicate<Integer> val1 = x -> (x > 10);
        Predicate<Integer> val2 = x -> (x < 50); 
        System.out.println(val1.and(val2).test(100));  
        System.out.println(val1.and(val2).test(40));
    }
}

假 真