Java8 Lamda表达式初体验
Lamda语法
标准语法
- (Type1 param1, Type2 param2, …, TypeN paramN) -> (
statment1;
statment2;
// …….
stamentN;
return something;
简化语法1
参数类型可以省略
lamda一般可以从上下文中推测推断参数类型,所以参数类型可以省略
- (param1, param2, …, paramN) -> (
statment1;
statment2;
// …….
stamentN;
return something;
简化语法2:当lamda表达式参数只有一个可以省略小括号
- param -> (
statment1;
statment2;
// …….
stamentN;
return something;
简化语法3:当lamda表达式只包含一条语句
可以省略大括号、return语句和分号
- param1 -> statment
方法引用(Method reference)和构造器引用(Construct reference)
方法引用
- objectName::instanceMethod
- ClasssName::staticMethod
ClassName::instanceMethod
前两种方式类似,等同于把lamda表达式的参数直接当作instanceMethod|staticMethod的参数来调用。
例如:
System.out::printLn; // 等同于x -> System.out.println(x)
Math::max; // 等同于 (x,y) -> Math.max(x,y);
最后一种方式将第一个参数当作调用主体,其他参数当作方法的入参
例如:
String::toString; // 等同于 (x,y) -> x.toString(y);
构造器引用
- 语法:ClassName::new
把lamda表达式的参数当作构造器的参数
例如
BigDecimal::new; //等同于x -> new BigDecimal(x)