Java 是否可以使用不同的类型参数将谓词与`和`链接起来?

Java 是否可以使用不同的类型参数将谓词与`和`链接起来?,java,java-8,generic-lambda,Java,Java 8,Generic Lambda,我正在学习Java8Lambdas。我可以使用谓词接口中的and方法连接两个具有不同类型参数的谓词吗 这是我的代码: Predicate<Integer> pc = (iv) -> iv > 20; Predicate<String> pL = (is) -> is.length() > 5; System.out.println("The predicate result for pc is: " + pc.test(25))

我正在学习Java8Lambdas。我可以使用谓词接口中的and方法连接两个具有不同类型参数的谓词吗

这是我的代码:

Predicate<Integer> pc = (iv) -> iv > 20;
Predicate<String> pL = (is) -> is.length() > 5;
System.out.println("The predicate result for pc is: " + pc.test(25));
System.out.println("===========");
System.out.println("The predicate result with both condition true: " + pc.and(pL.test("abcd")));
谓词pc=(iv)->iv>20;
谓词pL=(is)->is.length()>5;
System.out.println(“pc的谓词结果为:“+pc.test(25));
System.out.println(“===================”);
System.out.println(“条件均为true的谓词结果:+pc.and(pL.test(“abcd”)));

不,不能链接不同类型的谓词,除非链接的谓词也接受原始谓词的类型

查看签名,您可以很容易地看到:

和(PredicateDependent取决于您实际想要实现的目标,可能有替代方案。您无法具体链接,因为它们被定义为不同的类型。
的签名将有助于理解这一点。@Naman谢谢你,我只是想知道不同的类型参数将适用于使用
和进行链接e> 。所以我不能用不同的类型来链接它们。如果整数和字符串谓词对应于类的属性
t
,那么在您的示例中可以有一个
谓词
,这应该不起作用:pc.and(pL.test(“abcd”)要使用and(Predicate”)方法,您应该像这样链接谓词:predicate1.and(predicate2)。and(predicate3).test(myVar),但所有谓词都应为同一类型。您的代码甚至不编译。
pL.test(“abcd”)
返回布尔值,但
需要谓词。(
不兼容类型:布尔值不能转换为谓词这是一个非常好和彻底的答案。只需在最后的注释上做一个注释…创建自己的
Tri
Quad
等功能接口的另一种选择是使用currying,即
函数triPred=a->b->c->propertyOfA.test(a)&&propertyOfB.测试(b)和&propertyOfC.测试(c)
,假设您之前已声明predicates@fps我之所以避免使用curry,是因为我使用了
谓词
而不是
函数
:Java非常重视名称,我真的不想在这个答案中解释更多的函数概念,如curry、类型规范化、绑定等。是的,Java的pe系统让使用咖喱语变得很可怕,因为泛型非常冗长,语法也很难看。这就是为什么我投了赞成票,只留下了一条评论:)@fps这是我的梦想之一,在瓦哈拉、巴拿马和莱顿之后,也许lambdas会在某个时候重新访问。拥有一流公民的功能对Java来说是一个巨大的进步……但我高度怀疑我们在未来10年内会看到这一点。一流公民的功能只是一个梦想。。。