1、先爽用一下lambda
lambda表达式很大一个作业就是简化匿名内部类
public class case1 {
public static void main(String[] args) {
Integer[] arr = {2,5,1,0,9,7,4};
Integer[] arr2 = {2,5,1,0,9,7,4};
//使用匿名内部类作为比较器
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
//可以简化为lambda表达式
Arrays.sort(arr2,(Integer o1,Integer o2)->{
return o1-o2;
});
String s1 = Arrays.toString(arr);
String s2 = Arrays.toString(arr2);
System.out.println(s1);
System.out.println(s2);
}
}
我们也可以看到,运行之后的结果是一样的
2、lambda语法和函数式接口
lambda表达式的格语法:
注意点:
什么是函数式接口呢?
如果说,⼀个接口中,要求实现类必须实现的抽象方法,有且只有⼀个!这样的接口,就是函数式接口。
interface InterA{
public void show();
}
3、用lambda表达式调用参数为接口的方法
interface InterA{
void show();
}
public class case1 {
//参数是接口,正常情况下要传一个实现了接口的类才行
public static void show(InterA a){
a.show();
}
//使用匿名类去实现
public static void main(String[] args) {
show(new InterA() {
@Override
public void show() {
System.out.println("hhhh");
}
});
//使用lambda去简化
show(()->{
System.out.println("lllllllll");
});
}
}
4.Lambda表达式的语法进阶
参数部分的精简
参数的类型
由于在接口的方法中,已经定义了每⼀个参数的类型是什么。而且在使用lambda表达式实现接口的时候,必须要保证参数的数量和类 型需要和接口中的方法保持⼀致。因此,此时lambda表达式中的参数的类型可以省略不写。
注意点:
如果需要省略参数的类型,要保证:要省略, 每⼀个参数的类型都必须省略不写。绝对不能出现,有的参数类型省略了,有的参数类型没有省略。
//有参+返回值
Test test = (name,age) -> {
System.out.println(name+age+"岁了!");
return age + 1;
};
int age = test.test("小新",18);
System.out.println(age);
参数的小括号
如果方法的参数列表中的参数数量 有且只有⼀个,此时,参数列表的小括号是可以省略不写的。
注意事项:
- 只有当参数的数量是⼀个的时候, 多了、少了都不能省略。
- 省略掉小括号的同时, 必须要省略参数的类型
Test test = name -> System.out.println(name+"test");
test.test("小新");
return的精简
如果⼀个方法中唯⼀的⼀条语句是⼀个返回语句, 此时在省略掉大括号的同时, 也必须省略掉return。
Test test = (a,b) -> a+b;