Lambda表达式
凡是根据上下文推导出来的内容,都可以省略书写。
可以省略的内容:
-
(参数列表):括号中参数列表的数据类型,可以省略不写
-
(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
-
{一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略({},return,分号); 注意:要省略{},return,分号必须一起省略
由三部分组成:
-
一些参数
-
一个箭头
-
一段代码
格式:
(参数列表)——> {一些重写方法的代码};
解释说明格式
():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔
->:传递的意思,把参数传递给方法体{}
{}:重写接口的抽象的方法体
/*
需求:
给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值
使用Lambda的标准格式调用invokeCook方法,打印输出“吃饭啦!”字样
*/
public interface Cook {
public abstract void makeFood();
}
public class Demo {
public static void main(String[] args) {
//调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象
invokeCook(new Cook() {
public class Demo {
public static void main(String[] args) {
Arrays.sort(arr,new Comparator<>() {
public int compare(Person o1,Person o2) {
return o1-o2;
}
});
Arrays.sort(arr,(Person o1,Person o2) -> {
return o1 - o2;
});
}
}
/*
给定一个计算器Calculator接口,内含抽象方法clac可以将两个int数字相加得到值
*/
public interface Calculator {
public abstract int calc(int a,int b);
}
public class Demo {
public static void main(String[] args) {
invokeClac(120,130,(int a,int b) -> {
return a + b;
});
}
private static void invokeClac(int a,int b,Calaulator calaulator) {
int result = calaulator.calc(a ,b);
System.out.println("结果是"+result);
}
}
Lambda的使用前提
-
使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法
-