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);
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值