前言
随着函数式编程的流程,Java8中也引入了函数式编程风格(Lambda表达式)。Lambda表达式允许我们将行为传递到函数中,其可以替换匿名内部类实现的繁琐的代码。下面就是一个最经典的例子,用普通的匿名内部类一共用了6行代码,使用Lambda表达式只需要1行代码即可。也就是说,Lambda表达式在经常使用内部类情况下,可以大大的减少代码量,还有就是Lambda表达式经常和Stream API一起使用。
// 匿名内部类
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("do something");
}
};
// Lambda表达式
Runnable runnable2 = () -> System.out.println("do something");
Lambda表达式使用
Lambda表达式格式
(Type1 param1, Type2 param2, ..., TypeN typeN) -> {
statment1;
statment2;
// ......
return statmentM;
}
操作符'->':Lambda操作符,该箭头将Lambda表达式拆分为左右两部分
左侧:参数列表,只有一个参数时可以不写()
右侧:Lambda表达式体,就抽象方法实现区域。只有一行代码时可以不写{},参数类型也可以不用写(Java会通过上下文进行判断)
上面是标准的Lambda表达式,一般情况下Lambda表达式可以分为以下几种类型:
无参数无返回值
() -> {
statment1;
statment2;
...
statmentN;
}
有参数无返回值
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
statment1;
statment2;
...
statmentN;
}