Lambda表达式的使用前提
Lambda表达式的语法是非常简洁的,但是Lambda表达式不能随意使用,使用时需要注意以下几个条件。
- 方法的参数或局部变量类型必须为接口才能使用Lambda
- 接口中有且仅有一个抽象方法,可通过(@FunctionalInterface)来显示声明,该接口有且仅有一个抽象方法
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
Lambda标准写法
Lambda语法规则:
(参数类型 参数名称)->{
代码体
}
例子: 1.无参无返回的方法调用
public class LambdaDemo01 {
public static void main(String[] args) throws ExecutionException, InterruptedException{
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("开始执行匿名内部类线程的任务!!!");
}
}).start();
new Thread(()->{System.out.println("开始执行Lambda写法线程的任务!!!");}).start();
}
}
2.有参有返回值的方法调用
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private Integer age;
private Integer height;
}
public class LambdaDemo03 {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三",19,175));
personList.add(new Person("李四",33,170));
personList.add(new Person("小美",18,162));
personList.add(new Person("小明",23,171));
Collections.sort(personList, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getHeight()-o2.getHeight();
}
});
for (Person person : personList) {
System.out.println(person);
}
System.out.println("------------------------");
Collections.sort(personList,(Person o1,Person o2)->{
return o1.getAge() - o2.getAge();
});
for (Person person : personList) {
System.out.println(person);
}
}
public static void goShow(UserService userService){
userService.show();
}
}
Lambda省略写法
省略写法需要满足以下规则:
- 小括号内的参数类型可以省略
- 如果小括号内有且仅有一个参数,则小括号可以省略
- 如果大括号内有且仅有一个语句,可以同时省略大括号,return关键字以及语句分号’;’
public class LambdaDemo04 {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三",19,175));
personList.add(new Person("李四",33,170));
personList.add(new Person("小美",18,162));
personList.add(new Person("小明",23,171));
Collections.sort(personList,(Person o1,Person o2)->{
return o1.getHeight() - o2.getHeight();
});
for (Person person : personList) {
System.out.println(person);
}
System.out.println("Lambda省略写法");
Collections.sort(personList,(o1,o2)->o1.getAge() - o2.getAge());
for (Person person : personList) {
System.out.println(person);
}
}
}
|