Java 谓词
在 Java 中,谓词是一个位于 java.util.function 包中的接口。在Lambda 表达式和功能界面中用作赋值目标。
换句话说,我们可以说它代表一个布尔值函数,该函数返回真或假的布尔值。
它提高了代码的可管理性,并包含一些方法,如 test(),isEqual(),和(),或(),等。
我们希望,你有 Java lambda 表达式和函数接口的想法,因为这个话题是相互关联的,否则我们推荐你先从我们的技术门户阅读 lambda 表达式和函数接口。
申报
@FunctionalInterface public interface Predicate<T>
谓词方法
下表包含Predicate
接口的方法。它包含单个抽象方法 test()和其他默认静态方法。
|
方法
|
描述
|
| 布尔测试 | 它根据给定的参数计算这个谓词。 |
| 默认谓词
示例:
让我们举一个例子,通过使用预定义的 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));
}
}
假 真