一. 说明
Lambda表达式是JDK8开始新增的一种语法形式;作用:用于简化匿名内部类的代码写法
格式:
(被重写方法的形参列表) -> {
被重写方法的方法体代码
}
二.使用
1. 认识Lambda表达式
注意:Lambda表达式只能简化函数式接口的匿名内部类!!!
什么是函数式接口?
- 有且仅有一个抽象方法的接口
- 注意:将来我们见到的大部分函数式接口,上面都可能会有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口。
public class Test {
public static void main(String[] args) {
Swimming s = new Swimming() {
@Override
public void swim() {
System.out.println("学生快乐的游泳");
}
};
}
}
interface Swimming {
void swim();
}
接下来,我们将上面的内容改写为Lambda表达式
Swimming s = () -> {
System.out.println("学生快乐的游泳");
};
2. Lambda表达式的省略写法(进一步简化Lambda表达式的写法)
- 参数类型可以省略不写
- 如果只有一个参数,参数类型可以省略,同时()也可以省略。
- 如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。
例如:
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;
});
因为方法体只有一行代码,可以省略大括号不写,return不写,;不写:
Arrays.setAll(prices,value -> prices[value] * 0.8);