应用场景:为了解决代码重复使用时,提高复用率。
语法格式:
lambda 分为两个部分, 由中间部分 ‘->’做分割
左侧,参数列表;右侧是 lambda体(执行单元内容)
1、无参数
()->System.out.println("hello")
2、有一个参数,无返回值
(s)->System.out.println(s)
若只有一个参数的时候,小括号可以不写
s->System.out.println(s)
3、有多个参数,且有返回值的时候,且执行单元有多条语句
(s1,s2)->{
s1=s2+10;
return s1;
}
4、当执行单元只有一条语句,无论是否有返回值时
(s1,s2)->s1+s2;
此时,可以省略大括号。
若原接口方法,有返回值,则此时返回值内容 也为s1+s2;
注:由于,java会自动会根据上下问做类型推断,所以,左边括号的类型可以省略不写
如:(int s)->s++;和 (s)->s++是一样的效果。
应用需求:
lambda需要 函数式接口的支持;
函数式接口:是一个只有一个方法的接口。可以用
@FunctionalInterface注解来表达,一旦被这个注解后,则接口不能拥有多于1个的方法,否则报错。
总结:
lambda执行单元实际上就是为了实现接口的中方法。
写个完整的操作例子:
首先创建接口myfunction:
@FunctionalInterface
public interface myfuntion<T,R> {
public R getValue(T t1,T t2);
}
再写个执行类:
public class test {
public static void main(String[] args) {
con(25L,45L,(t1,t2)->t1 * t2);//实现乘法
con(25L,45L,(t1,t2)->t1 + t2);//实现加法
}
public static void con(Long t1,Long t2,myfuntion<Long,Long> my){
System.out.println(my.getValue(t1,t2));
}
}