Upu*_*era 3 java functional-programming java-8
我是新来的Java 8,我无法找到任何原始BiConsumer(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();
Run Code Online (Sandbox Code Playgroud)
我很确定他们以合理的理由设计它,请让我理解它.
其实,有一个ObjIntConsumer在Java中这是一个局部INT-专业化BiConsumer。所以,你的第一个例子可以改写为:
ObjIntConsumer<String> consumer = (s, i) -> System.out.printf("Consume %d %s%n", i, s);
Run Code Online (Sandbox Code Playgroud)
我没有看到排除背后的任何具体原因IntBiConsumer,@FunctionalInterface如果你需要,你可以轻松实现这一点.我想这与我们没有TriFunction或TriConsumer接口的原因相同.
不要混合IntBinaryOperator使用ToIntBiFunction.第一种是类型的函数,(int, int) -> int而后者是形式的函数(T, U) -> int.所以后者最多可能是这样(Integer, Integer) -> int但是这会引起对象内部的原始拳击,这对于表演来说是远远不够的.IntBinaryOperator相反,将它们保持为未装箱,这在您需要更多性能时很有用(并且可以是二进制int函数的情况).