一:背景
java8最重要的改变之一就是lambda,lambda源于数学中的λ演算,对应的含义是匿名函数,在java中我们可以将其理解函数可以向参数一样进行传递。lambda为java填补了函数式编程的缺失,这种方式从好的角度来说可以是编程风格更简洁,代码更紧凑。
二:Lambda表达式基础语法
lambda表达式的重要特征:
(1)无需声明参数类型,编译器会进行类型推断。
(2)参数大于一个,不包括一个则必须写圆括号,没有参数是有空圆括号()。
(3)lambda表达式可以包含一条或多条语句,如果只有一条语句可以不需要使用大括号和return
语法如下:
1:(x, y) -> expression;
2:x -> expression;
3: () -> {
expression1;
expression1;
}
简单例子如下:
public static void main (String[] args){
MathOperation addition = (a, b) -> a + b;
addition.operation(3, 5);
}
interface MathOperation {
int operation(int a, int b);
}
三:变量作用域
如果lambda表达式内部要引用外部变量的话,则外部变量必须要有final声明,不过java7后外部变量不需要显示的声明final,只要实际具有final的语义即可。至于为什么要这么做?原因是为了保护数据的一致性,因为传入到表达式内部的变量实际上是变量的副本,如果不是final声明,发生修改的话会导致内外部数据不一致的情况发生。
四:函数式接口
之前的文章中有过介绍,在这里重复一下,因为很重要,Lambda表达式需要函数式接口的支持,函数式接口可以使用@FunctionalInterface注解,编译器会自动检查是否服务函数式接口的规范