使用Java中功能接口软件包的谓词
#java #predicateinterface #funtionalprogramming #接口

Java 8的出现带来了Java.util.Function套件。这是一个包含通常与lambda表达式使用的定义功能接口的软件包。

我假设您对lambda表达的基本知识,如果不继续阅读本文here,然后回到这个文章。

这是我将发布有关如何利用包装功能接口的一系列文章中的第一篇。

让我们开始开始!

谓词

根据JDK 1.8文档的谓词“代表一个参数的谓词(布尔值函数)”;这基本上是指您在需要检查需要返回布尔值的某些条件时使用谓词。

谓词接口具有五种方法,一种单个抽象方法,如预期的。三种默认方法和静态方法。

来自谓词接口的方法

test()方法

test()方法也称为功能接口谓词的功能方法。 test()方法采用单个参数会评估给定参数的谓词并返回布尔值。

摘自文档

示例代码


// predicate interface type assigned to a field
Predicate<Integer> p = n -> (n>20);
// calling the functional method test on the predicate field p
System.out.println(p.test(40)); // output = true

上方您看到我们创建了类型谓词的字段P。我们分配了一个lambda表达式,该表达式检查传递的参数是否大于该字段p 20。当函数方法test()都在任何方法上调用传递参数的任何方法时,都会推断出并从lambda表达式中使用n,在情况下(即示例),答案是正确的,因为40大于20。

和()方法

来自谓词接口的三个默认方法之一是和()方法。它采用一个类型谓词的参数,而另一个使用点运算符则使用和()方法链接。


// syntax to use and() method
P1.and(p2);

and()方法“返回一个代表短裤循环逻辑及其谓词和另一个的组成谓词”。这仅意味着()方法通过使用逻辑表达式将结果组合在一起以获得输出来评估两个谓词。
在评估任何谓词是否是错误的同时,则不得评估另一个谓词,因为两者都必须正确。因此,在这种特殊情况下,false是输出。

摘自文档

示例代码


// array of number
int[] numArray = {2, 5, 10, 20, 30, 40, 45, 47, 50, 56, 60, 63, 70};
// to check if a number is even
Predicate<Integer> p1= n -> (n%2==0);
// to check id number is greater than 55
Predicate<Integer> p2= n -> (n>55);
// looping through number array
for (int num : numArray) {
// using and() method to check for two conditions and calling the functional method test()
if(p1.and(p2).test(num)) {
// print numbers that are even and greater than 55
System.out.println(num);
}
}

或()方法

or()方法在许多方面类似于和()方法。它采用一个类型谓词的参数,而另一个类型的参数则使用点运算符,就像这样。


// syntax to use or() method
p1.or(p2);

根据Java 8文档,“它返回代表短路逻辑或该谓词的组成谓词,另一个。
这仅意味着或()方法通过将结果组合成输出来评估谓词。
在使用或方法评估谓词的同时,如果第一个给出了一个true,则未评估另一个词法,因为或()仅需要一个逻辑为true。

摘自文档

示例代码


// array of numbers
int[] numArray = {2, 5, 10, 20, 30, 40, 45, 47, 50, 56, 60, 63, 70};
// to check if a number is even
Predicate<Integer> p1= n -> (n%2==0);
// to check id number is greater than 55
Predicate<Integer> p2= n -> (n>55);
// looping through array
for (int num : numArray) {
// using or() method to check for two conditions and calling the functional method test()
if(p1.or(p2).test(num)) {
// print numbers that are either even or greater than 55
System.out.println(num);
}
}

negate()方法

negate()方法返回谓词结果的相反,negate()很简单。根据文档“返回代表此谓词的逻辑否定的谓词”

示例代码


// array of numbers
int[] numArray = {2, 5, 10, 20, 30, 40, 45, 47, 50, 56, 60, 63, 70};
// to check if a number is even
Predicate<Integer> p1= n -> (n%2==0);
// to check id number is greater than 55
Predicate<Integer> p2= n -> (n>55);
// looping through array
for (int num : numArray) {
// using negate() method get negation of two conditions and calling the functional method test()
if(p1.negate(p2).test(num)) {
// print numbers that are neither even nor greater than 55
System.out.println(num);
}
}

isequal()方法

此方法像objectss.equals(对象,对象)方法一样函数,以比较两个对象并检查它们是否相等。就像该方法的其余部分外,除了功能方法测试外。 iSequal()方法返回一个谓词,该谓词表示两个对象是否相等。

摘自文档

示例代码


// predicate type field p1 using the isEqual() method
Predicate<String> p1 = Predicate.isEqual("Prince");
// invocating the isEqual() using the functional method test()
System.out.println(p1.test("Prince"));

摘要

谓词接口具有五种方法,包括函数方法(即test()方法),该方法是单个抽象方法,其函数是调用从谓词接口中使用的任何方法。
其他方法(例如或()执行或逻辑,以及()方法执行和逻辑,negate()方法不逻辑和iSequal()方法比较两个谓词对象,并给出反映对象平等的布尔输出。

感谢您的时间,并在下一个抓住我,在LinkedIn上与我联系。

信用