为什么Java8中没有基本的双消费者?
我是Java8新手,找不到任何基本的双消费函数(IntBiConsumer等),但是有一个ToIntBiFunction,它是双功能的基本专门化。还有一个IntBinaryOperator,它与ToIntBiFunction相同为什么Java8中没有基本的双消费者?,java,functional-programming,java-8,Java,Functional Programming,Java 8,我是Java8新手,找不到任何基本的双消费函数(IntBiConsumer等),但是有一个ToIntBiFunction,它是双功能的基本专门化。还有一个IntBinaryOperator,它与ToIntBiFunction相同 BiConsumer<Integer,String> wrappedBiConsumer = (i,s) -> System.out.printf("Consume %d %s \n",i,s); ToIntBiFunction<String,S
BiConsumer<Integer,String> wrappedBiConsumer = (i,s) -> System.out.printf("Consume %d %s \n",i,s);
ToIntBiFunction<String,String> toIntFunction = (a,b) -> a.length()* b.length();
BiConsumer wrappedBiConsumer=(i,s)->System.out.printf(“消费%d%s\n”,i,s);
ToIntBiFunction toIntFunction=(a,b)->a.length()*b.length();
我确信他们这样设计是有充分理由的,请让我理解。我看不出排除
IntBiConsumer
的背后有任何具体原因,这是一个微不足道的@FunctionalInterface
,如果需要,您可以轻松实现。我想这也是我们没有TriFunction
或TriConsumer
接口的原因
不要将
IntBinaryOperator
与ToIntBiFunction
混合使用。第一种是(int,int)->int
类型的函数,而后者的形式是(T,U)->int
。因此,后者最多可以是(Integer,Integer)->int
,但这会导致对象内部的原语装箱,这远远不利于性能<相反,code>IntBinaryOperator将它们保持为未绑定状态,这在需要更高性能时非常有用(对于二进制int函数也是如此)。事实上,Java中有一个ObjIntConsumer
是BiConsumer
的部分int特化。因此,您的第一个示例可以改写为:
ObjIntConsumer<String> consumer = (s, i) -> System.out.printf("Consume %d %s%n", i, s);
ObjIntConsumer consumer=(s,i)->System.out.printf(“consumer%d%s%n”,i,s);
如果它们包括所有可能的功能接口与基本类型的组合,那么可能性的数量将爆炸式增长。我想他们只是挑选了他们认为最有用的。他们没有设计理由不包括它。他们没有需要它的API,所以他们没有麻烦。FWIW,我从Maven Central创建了一个包,包含了几乎所有的变体,比如IntBiConsumer
你可能想要的-com.mastfrog:function
-javadoc这里: