为什么在双功能接口Java 8中省略了compose and identity方法?
我刚开始阅读Java 8概念,但在阅读过程中,我发现了一些不足以说服我的东西,那就是在为什么在双功能接口Java 8中省略了compose and identity方法?,java,java-8,Java,Java 8,我刚开始阅读Java 8概念,但在阅读过程中,我发现了一些不足以说服我的东西,那就是在BiFunction接口中省略了compose和identity方法。从Java 8文档中我可以看到,Bifunction似乎与Function接口相同,但它需要额外的参数,因此在这种情况下,Bifunction应该具有与Function接口相同的所有特性,但事实并非如此 因此,有人能帮我找到省略这些方法的原因吗?Function.identity()返回接受单个参数并返回该参数的函数 一个BiFunction
BiFunction
接口中省略了compose
和identity
方法。从Java 8文档中我可以看到,Bifunction
似乎与Function
接口相同,但它需要额外的参数,因此在这种情况下,Bifunction
应该具有与Function
接口相同的所有特性,但事实并非如此
因此,有人能帮我找到省略这些方法的原因吗?Function.identity()
返回接受单个参数并返回该参数的函数
一个BiFunction
有两个参数,那么哪个参数将identity()
返回
类似地,compose()
用于通过将第一个函数的结果作为第二个函数所期望的单个参数进行传递来组合两个函数
对于具有两个参数的函数,您将如何实现类似的功能?第一个函数将产生一个值,但第二个函数需要两个参数
通过将BiFunction
的结果作为函数
的参数传递,您仍然可以将双函数
与函数
组合。为了这个目的你有
例如,假设您有一个双功能
,如下所示:
BiFunction<Integer,Integer,Integer> mul = (x,y) -> x*y;
BiFunction<Integer,Integer,Integer> mulPlus5 = mul.andThen(plus5);
并称之为:
int result = mulPlus5.apply(2,3); // this will multiply 2*3 and add 5, resulting in 11.
您不能先应用plus5
(或某些BiFunction
作为替代)然后将其结果传递给mul
,因为mul
接受两个参数,而应用plus5
(或任何其他函数
或双功能
)将产生一个值。感谢Eran,我认为用同一方法进行观察是合适的,你能帮我确定写作方法的案例吗?所以在这种情况下,即使是和该方法也应该被省略,对吗?你能举个例子,为写作做更多的阐述吗method@srikzen然后
没有被省略,因为它在其参数处接受一个函数
,您可以在双功能
的结果上应用该函数
compose
的工作方式与此相反—您首先将要应用的函数传递给它,然后将函数的结果反馈给调用它的函数。对于双函数你不能这样做,因为双函数需要两个参数。我不同意关于恒等式的前提。Java工程师实现Bifunction.returnFirst()和Bifunction.retunSecond()或任何最适合他们的名称是否会如此困难?文档:“identity()
-返回一个始终返回其输入参数的函数”如何处理两个输入?对于compose
int result = mulPlus5.apply(2,3); // this will multiply 2*3 and add 5, resulting in 11.