1.Lambda是什么?
Lambda是Java8的新特性,Lambda表达式也可以称为闭包,Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
2.Lambda的返回类型及注意事项
2.1表达式格式:
(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)
2.1以最简单的 ()->5;为例:
(此讲解需要有一定的Java开发基础)
//函数式接口
interface CoutIntf(){
int count();
}
运用:
//调用及返回:
CoutIntf b = () -> 15;
讲解:
//Lambda表达式的发展过程:(实现模式就是匿名内部类)
//1.使用匿名对象来赋值(相当于实现了CoutIntf接口)
CoutIntf b = new CoutIntf () {
public int count(a){
return 15;
}
};
//2.匿名对象类型省略
CoutIntf b = () -> {return 15;}
//3.返回表达式去括号
CoutIntf b = () -> return 15;
//4.去return
CoutIntf b = () -> 15;
2.2注意事项:
1.由于Lambda表达式的定义要求,接口里面的方法有且只能有一个,即,接口之恶能为函数式接口
2.Lambda表达式的返回类型不是接口中方法的返回类型,而是接口类型
3.若int count();
改为int count(a);
,那么调用可以写为CoutIntf b = (a) -> 15
也可写为CoutIntf b = a -> 15
,当函数只有一个入参时,可以省略括号不写。但从格式统一来说,建议还是加上括号
4.虽然Lambda表达式非常强大,但对于新手非常不友好,因为从Lambda表达式的调用来看只能知道函数的入参、返回值和返回类型,比较难看懂表达式的运用。