一、Lambda表达式的使用条件
1.匿名内部类实现接口
2.这个接口是函数式接口(@FunctionalInterface),接口中有且仅有一个抽象方法
3.这个接口作为方法参数使用
二、Lambda表达式的语法
(参数类型 参数名称 ) -> { 代码语句}
三、使用方法
//当方法没有参数时
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
});
//Lambda表达式
Thread t1 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
});
//当方法有两个参数时
Integer[] a = {1,2,3,4};
Arrays.sort(a, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
//Lambda表达式
Arrays.sort((Integer o1, Integer o2) -> {return o1 - o2;});
//简化:省略方法参数类型
Arrays.sort((o1 , o2) -> {return o1 - o2;});
//简化:当方法体中只有一句话,不论方法中需不需要返回值,可以省略{},return,;,需要同时省略。
Arrays.sort((o1 , o2) -> o1 - o2);
//当方法中只有一个参数时
//自定义的接口和方法
m1(new Koo() {
@Override
public int getNum(int b) {
return b;
}
});
//Lambda表达式
m1((int b) -> {return b;});
//初步简化(省略方法参数类型)
m1((b) -> {return b;});
//进一步简化(同时省略{},return,;)
m1((b) -> b);
//继续简化,因为方法只有一个参数,还可以省略小括号
m1(b -> b);