Java 8:将java.util.function.Function实现为Lambda表达式的语法

时间:2014-12-07 00:24:12

标签: java syntax lambda java-8

我在使用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表达式语法的问题,似乎没有任何工作。

1 个答案:

答案 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类型。读