JAVA中Lambda表达式初谈

Lambda表达式的语法
基本语法:
(parameters) -> expression

(parameters) ->{ statements; }
// 不需要参数,返回值为 5  
() -> 5  
  
// 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)  

注意:如果Lambda表达式只在某些分支返回一个值、而在另外一些分支不返回值、只是不合法的。例:

(int x)->{if (x >= 0) return 1;}

处理Lambda表达式

在Java中,对Lambda表达式所能做到的也只是能转换为函数式接口。
对于只有一个抽象方法的接口,需要这个接口对象时,就可以用一个Lambda表达式。
例如:Arrays.sort()方法,他的第二个参数需要一个Comparator实例,Comparator就是只有一个抽象方法的接口。
Arrays.sort(words, (first, second)->first.length() - second.length());
又例如在处理并发时需要一个线程对象:
Runable r = ()-> {
    ...
}


Lambda表达式可以捕获外围作用域中变量的值,但是只能引用这个捕获的值,而不能改变变量。
而且,Lambda表达式捕获的变量必须是最终变量(变量初始化之后就不会再为他赋新值)。
例如以下都是非法的:
int start = 10;
        () -> {
            start--;    // 错误、只能引用值、不能改变值
            System.out.println(start);
        }

for (int i = 0; i < 20; i++) {
            () -> {
                // 错误只能捕获最终变量
                System.out.println(i);
            }
        }

你可能感兴趣的:(Java,SE8)