Java 8是否支持本地Lambda变量?

3

考虑以下代码(不可编译):

 List<String> list = Arrays.asList("a", "b");
 list.stream().map(s ->
         String variable = method(s)
         variable + "debug"
 );

 private String method(String s) {
         return s;
 }

代码行String variable = method(s)没有被编译。

我能在lambda表达式内部定义一个局部变量吗,还是这是设计上的禁止?


debug 的输出来看,你不想使用 peek() 函数吗? - epoch
1
请参阅JLS第15.27.2节,其中定义了lambda函数体。 - Tunaki
你遇到了什么错误?是什么让你认为你不能有局部变量? - Sotirios Delimanolis
1个回答

12

不过,多语句的lambda函数需要用花括号包裹代码块。你还需要在语句末尾正确使用分号。此外,你需要使用return关键字。

list.stream().map(s ->{
            String variable = method(s);
            return variable + "debug";
        }
    );

单语句lambda函数隐含了一个return语句,可以避免你手动输入并使lambda更易读。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接