lambda是什么:
- lambda是Java8的重要新特征,使用 Lambda 表达式可以使代码变的更加简洁紧凑,同时lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
- 相较于Java7匿名内部类,lambda不仅仅是语法糖而已,经反编译后可知:匿名内部类会创建一个内部类对象,而lambda表达式会被封装为主类的私有方法。
- lambda表达式会省略方法名或省略方法名与接口名(仅能取代函数接口:一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。),即:
//此处省略Runable接口与run方法名称
new Thread( () -> { System.out.print("Hello"); } ).start();
语法特征:
- (parameters) -> expression 或 (parameters) ->{ statements; }
- 以下是lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值,即:
Function f1=(a)-> a.toString(); //或 Function f1=(a)-> {return a.toString();};
-
类名::方法名
注意是方法名哦,后面没有括号“()”。为啥不要括号,因为这样的是式子并不代表一定会调用这个方法。这种式子一般是用作Lambda表达式,Lambda有所谓懒加载嘛,不要括号就是说,看情况调用方法。
参考:
https://www.runoob.com/java/java8-functional-interfaces.html
https://objcoding.com/2019/03/04/lambda/
https://blog.csdn.net/lsmsrc/article/details/41747159
后续:lambda与Collections、stream(待整理)