Lambda表达式
Lambda表达式的格式:
格式: (数据类型 变量名,数据类型 变量名,..)->{ 代码 }
解析:
小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
->是新引入的语法格式,代表指向动作。
大括号内的语法与传统方法体要求基本一致。
举例:
1.线程执行任务
2.集合元素排序
Lambda表达式的套路:
1.分析是否可以使用Lambda表达式
2.如果可以使用,先写上()->{}
3.填充小括号里面的内容
4.填充大括号里面的内容
Lambda表达式小括号中的内容与接口中抽象方法的小括号内容一致
Lambda表达式大括号中的内容与接口中抽象方法实现的时候的方法体一致
Lambda表达式省略格式
1. 小括号内参数的类型可以省略;
2. 如果小括号内有且仅有一个参数,则小括号可以省略;
3. 如果大括号内有且仅有一条语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
Lambda的前提条件和表现形式
Lambda的前提条件
- 使用Lambda必须具有接口,且要求接口中的抽象方法有且仅有一个。(别的方法没有影响)
- 如果一个接口中只有一个抽象方法,那么这个接口叫做是函数式接口。
@FunctionalInterface这个注解 就表示这个接口是一个函数式接口
Lambda的表现形式
- 变量形式
- 参数形式
- 返回值形式
public class Test {
public static void main(String[] args) {
Runnable r = ()->{
System.out.println("Lambda表达式的方式传递任务...");
};
new Thread(r).start();
new Thread(()->{
System.out.println("Lambda表达式的方式传递任务...");
}).start();
ArrayList<Integer> list = new ArrayList<>();
list.add(500);
list.add(300);
list.add(200);
list.add(400);
list.add(100);
Collections.sort(list,(Integer o1, Integer o2)->{return o2 - o1;});
Collections.sort(list, (o1, o2) -> o2 - o1);
System.out.println("排序后的集合:" + list);
Comparator<Integer> comp = getComparator();
Collections.sort(list,comp);
System.out.println("排序后的集合:" + list);
}
public static Comparator<Integer> getComparator(){
return (Integer i1,Integer i2)->{return i1 - i2;};
}
}