文章目录
- Lambda表达式基本使用
- Lambda表达式省略规则
Lambda表达式是JDK8新增的一种语法形式,其 作用:用于简化匿名内部类代码的书写。
Lambda表达式基本使用
Lamdba是有特有的格式的,具体格式如下:
(被重写方法的形参列表) -> {被重写方法的方法体代码;
}
注意!在使用Lambda表达式之前,必须先有一个接口,而且接口中只能有一个抽象方法。(注意:不能是抽象类,只能是接口)
像这样的接口,我们称之为函数式接口,只有基于函数式接口的匿名内部类才能被Lambda表达式简化。
public interface Swimming{void swim();
}
使用Lambda表达式,简化匿名内部类书写,案例如下
public class LambdaTest1 {public static void main(String[] args) {//1.创建一个Swimming接口的匿名内部类对象Swimming s = new Swimming(){@Overridepublic void swim() {System.out.println("学生快乐的游泳~~~~");}};s.swim();//2.使用Lambda表达式对Swimming接口的匿名内部类进行简化Swimming s1 = () -> {System.out.println("学生快乐的游泳~~~~");};s1.swim();}
}
Lambda表达式省略规则
除了基本使用以外,java还提供了Lamdba表达式的几种简化写法。具体的简化规则如下
1.Lambda的标准格式(参数类型1 参数名1, 参数类型2 参数名2)->{...方法体的代码...return 返回值;}2.在标准格式的基础上()中的参数类型可以直接省略(参数名1, 参数名2)->{...方法体的代码...return 返回值;}3.如果{}总的语句只有一条语句,则{}可以省略、return关键字、以及最后的“;”都可以省略(参数名1, 参数名2)-> 结果4.如果()里面只有一个参数,则()可以省略(参数名)->结果
四种写法的案例代码如下:
public class LambdaTest2 {public static void main(String[] args) {// 目标:使用Lambda简化函数式接口。double[] prices = {99.8, 128, 100};//1.对数组中的每一个元素*0.8: 匿名内部类写法Arrays.setAll(prices, new IntToDoubleFunction() {@Overridepublic double applyAsDouble(int value) {// value = 0 1 2return prices[value] * 0.8;}});//2.需求:对数组中的每一个元素*0.8,使用Lambda表达式标准写法Arrays.setAll(prices, (int value) -> {return prices[value] * 0.8;});//3.使用Lambda表达式简化格式1——省略参数类型Arrays.setAll(prices, (value) -> {return prices[value] * 0.8;});//4.使用Lambda表达式简化格式2——省略()Arrays.setAll(prices, value -> {return prices[value] * 0.8;});//5.使用Lambda表达式简化格式3——省略{}Arrays.setAll(prices, value -> prices[value] * 0.8 );System.out.println(Arrays.toString(prices));System.out.println("------------------------------------Student[] students = new Student[4];students[0] = new Student("蜘蛛精", 169.5, 23);students[1] = new Student("紫霞", 163.8, 26);students[2] = new Student("紫霞", 163.8, 26);students[3] = new Student("至尊宝", 167.5, 24);//1.使用匿名内部类Arrays.sort(students, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Double.compare(o1.getHeight(), o2.getHeight()); // 升序}});//2.使用Lambda表达式表达式——标准格式Arrays.sort(students, (Student o1, Student o2) -> {return Double.compare(o1.getHeight(), o2.getHeight()); // 升序});//3.使用Lambda表达式表达式——省略参数类型Arrays.sort(students, ( o1, o2) -> {return Double.compare(o1.getHeight(), o2.getHeight()); // 升序});//4.使用Lambda表达式表达式——省略{}Arrays.sort(students, ( o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));System.out.println(Arrays.toString(students));}
}