java8中lambda表达式,类似c#中 lambda表达式,ES6中的箭头函数 。
定义:
若java 接口中只有一个抽象方法,我们new 这个接口的实例时需要实现这个唯一的抽象方法,除此之外我们还可以使用一种新的表达方式来new这个接口的实例对象,这就是lambda表达式。这就是说,对于任何只有一个抽象方法的接口,都可以采用lambda的方式产生这个接口的实例对象。
示例 :
例如,我们有一个MathOP接口,里面只有一个唯一的抽象方法。
interface MathOP{
int op(int a ,int b);
}
new这个接口的实例对象时,就可以采用lambda的方式,如:
MathOP add =(a,b)-> {return a+b;};//加法
MathOP sub =(a,b)-> a-b;//减法
MathOP multiply =(a,b)-> a*b;//乘法
MathOP divide =(a,b)-> a/b;//除法
System.out.println(add.op(4, 5));
System.out.println(sub.op(4, 5));
System.out.println(multiply.op(4, 5));
System.out.println(divide.op(11, 5));
新定义个方法,传入MathOP 类型的参数
public static int myoperate(MathOP mathOP ,int a, int b) {
return mathOP.op(a, b);
}
System.out.println(myoperate(multiply,3,10));//调用myoperate方法
lambda语法:
(参数列表)->{方法体} 如 (a,b)->{return a+b;};
1、当参数列表中只有一个参数时,可省略小括号 如 a->{return a+b;};
2、当参数列表中没有参数,则需要保留一个空的小括号 如()->{System.out.println("hello");};
3、当参数列表中含有多个参数时,小括号必须保留,且参数列表中每一个参数都应提供, 如 (a,b)->{return a+b;};
4、参数列表中的每个参数的java类型是可选的,如 (String a)->{return a+b;}; 可省略参数类型String 为 (a)->{return a+b;};
5、如果方法体中有多条语句,则必须用{}括起来,且{}中的每条语句必须以分号结尾。如果方法体中只有一条语句,
则可省略{},且无需添加return以返回数据(隐式的return 了) ,如 a-> a*2