Java8中的Lambdas和泛型

Java8中的Lambdas和泛型,java,lambda,java-8,Java,Lambda,Java 8,我正在玩未来的Java8版本,也就是JDK1.8 我发现你很容易做到 interface Foo { int method(); } 像这样使用它 Foo foo = () -> 3; System.out.println("foo.method(); = " + foo.method()); 它只打印3 我还发现有一个java.util.function.function接口,它以一种更通用的方式实现这一点。但是,此代码不会编译 Function times3 = (Integer

我正在玩未来的Java8版本,也就是JDK1.8

我发现你很容易做到

interface Foo { int method(); }
像这样使用它

Foo foo = () -> 3;
System.out.println("foo.method(); = " + foo.method());
它只打印3

我还发现有一个java.util.function.function接口,它以一种更通用的方式实现这一点。但是,此代码不会编译

Function times3 = (Integer triple) -> 3 * triple;
Integer twelve = times3.map(4);
看来我首先要做的是

interface IntIntFunction extends Function<Integer, Integer> {}

IntIntFunction times3 = (Integer triple) -> 3 * triple;
Integer twelve = times3.map(4);
IntFunction times3 = triple -> 3 * (Integer) triple;
接口IntIntFunction扩展函数{}
IntIntFunction times3=(整数三元组)->3*triple;
整数12=times3.map(4);

所以我想知道是否有其他方法可以避免初始化功能步骤?

@joop和@edwin谢谢

基于JDK 8的最新版本,这应该可以做到

IntFunction<Integer> times3 = (Integer triple) -> 3 * triple;

因此,您不需要指定类型或括号,但在访问它时需要强制转换参数。

Mapper times3
也许吧?现在我开始理解泛型,它们附带了以下内容:-(…事实上,在最新版本中,不再有接口映射器。它现在被调用。使用当前JDK8Wait调用了一些原始版本,以及。
Function times3
。强制转换在那里做什么?是否需要
triple
作为对象?您是否建议强制转换为
Integer
,而不是
int
?我认为(int)cast不会编译。int函数和函数之间有什么区别?int函数将int作为参数。函数是整数。它是经典的java原语,而不是它的包装类。