为什么Java8中没有基本的双消费者?

为什么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

我是Java8新手,找不到任何基本的双消费函数(IntBiConsumer等),但是有一个ToIntBiFunction,它是双功能的基本专门化。还有一个IntBinaryOperator,它与ToIntBiFunction相同

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();
  • Oracle没有提供Java8的IntBiConsumer有什么原因吗
  • 为什么有两个像“IntBinaryOperator”和“ToIntBiFunction”这样的接口,而有一个像“IntBiFunction”这样的接口?(如果它们用于不同的目的,仍然可以从同一父IntBiFunction扩展它们)

  • 我确信他们这样设计是有充分理由的,请让我理解。

    我看不出排除
    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这里: