一.Lambda表达式简介
1.Lambda表达式是JDK8开始新增的一种语法形式;作用: 用于简化匿名内部类的代码写法。
lambda表达式的基础语法:
(被重写方法的形参列表) - > {
被重写方法的方法体代码
}; 如下:
package test;
public class Test04 {
public static void main(String[] args) {
//使用lambda表达式实现接口
// Swimming s = new Swimming(){
// @Override
// public void swim() {
// System.out.println("学生快乐的游泳~~~~");
// }
// };
// s.swim();
Swimming s = () -> {
System.out.println("小狗游得贼快");
};
s.swim();
}
}
interface Swimming{
public void swim();
}
Lambda表达式简化Comparator接口的匿名形式
// public static void main(String[] args) {
// Arrays.sort(students, new Comparator<Student>(){
// @Override
// public int compare(Student s1, Student s2) {
// return s1.getAge() - s2.getAge();
// }
// });
Arrays.sort(students,(Student s1,Student s2) ->{
return s1.getAge() - s2.getAge();
});
对!就是酱子~~
注意 : Lambda表达式只能简化函数式接口的匿名内部类!!
二.函数式接口
有且仅有一个抽象方法的接口。
注意:将来我们见到的大部分函数式接口,上面都可能会有一个@Functionallnterface的注解,有该
注解的接口就必定是函数式接口。
//有且只有一个抽象方法的接口
interface Test{
public void test();
}
@FunctionalInterface
interface Test{
public void test();
}
三.Lambda表达式的简化
1.参数类型可以省略不写
// Arrays.setAll(prices,(int value) ->{
// return prices[value] * 0.8;
// });
Arrays.setAll(prices,( value) ->{
return prices[value] * 0.8;
});
Arrays.setAll(prices,value ->{
return prices[value] * 0.8;
});
2.如果只有一个参数,参数类型可以省略,同时括号也可以省
// Arrays.setAll(prices,(int value) ->{
// return prices[value] * 0.8;
// });
Arrays.setAll(prices,value ->{
return prices[value] * 0.8;
});
3.如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写
// Arrays.setAll(prices,(int value) ->{
// return prices[value] * 0.8;
// });
Arrays.setAll(prices, value -> prices[value] * 0.8 );