基本概念
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
无参Demo演示:
接口:
package Lambda;
public interface Cook {
void makeFood();
}
调用接口:
package Lambda;
public class InvokeCook {
private static void invokeCook(Cook cook){
cook.makeFood();
}
public static void main(String[] args) {
invokeCook(() -> System.out.println("吃饭"));
// 匿名内部类,代码结构相对复杂且冗余
invokeCook(new Cook() {
@Override
public void makeFood() {
System.out.println("吃饭+1");
}
});
}
}
有参数Demo演示
创建Person类:
package Lambda;
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Person(){}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
使用Lambda调用Person类:
package Lambda;
import java.util.Arrays;
public class PersonImp {
public static void main(String[] args) {
Person[] arr = {
new Person("迪丽热巴", 20),
new Person("古力娜扎", 19),
new Person("马儿扎哈", 2000)
};
// 按照年龄对集合进行升序排序
Arrays.sort(arr, (Person p1, Person p2) -> {
return p1.getAge() - p2.getAge();
});
for (Person person : arr) {
System.out.println(person);
}
}
}