我在使用Java 8的lambda表达式语法时遇到问题,我似乎无法在一行中动态创建一个。以下代码有效,
Function<Integer, Integer> increment = (x) -> (x + 1);
doStuff(increment);
但以下行不
doStuff((x) -> (x + 1));
doStuff(Function (x) -> (x + 1));
doStuff(new Function (x) -> (x + 1));
doStuff(Function<Integer, Integer> (x) -> (x + 1));
doStuff(new Function(Integer, Integer> (x) -> (x + 1));
doStuff(new Function<Integer, Integer>(x -> {x + 1;}));
我不太确定我还能尝试什么。我当然不想使用
doStuff(new Function<Integer, Integer>() {
@Override
public Integer apply(Integer x){
return x + 1;
}
});
那还有什么呢?我已经查看了一堆关于lambda表达式语法的问题,似乎没有任何工作。
答案 0 :(得分:4)
简单
doStuff((x) -> (x + 1));
你有
Function<Integer, Integer> increment = (x) -> (x + 1);
doStuff(increment);
所以只需用=
的右侧(通常)替换它。
(x) -> (x + 1)
如果doStuff
的单个参数不是Function<Integer, Integer>
类型,则需要目标功能接口类型
doStuff((Function<Integer,Integer>) (x) -> (x + 1));
您的方法使用原始Function
类型。读