lambda表达式介绍
lambda表达式 也可称为闭包 是java8发布的新特性
lambda允许把函数作为一个方法的参数
使用lambda的优势:使代码变的更加简洁紧凑
lambda表达式的语法格式(两种):
(parameters) -> expression
(parameters) -> {statements;}
lambda表达式的重要特征
类型声明 --> 可选:不需要声明参数类型,编译器可以统一识别参数值
参数圆括号 --> 可选:一个参数时无需定义圆括号,多个参数时必须定义圆括号
大括号 --> 可选:如果主体包含一个语句,可以不使用大括号
返回关键字(return) --> 可选:如果主体只有一个表达式时,编译器会自动返回值;如果使用了大括号需要指明表达式返回了一个数值
-> 必须要有的。是一个运算符,表示指向性动作
lambda表达式代码操作
public class Java8LambdaTest {
interface MathOperation {
int operation(int a, int b);
}
interface MessageOperation {
void sayMessage(String message);
}
private static int mathOperation(int a, int b, MathOperation matchOperation) {
return matchOperation.operation(a, b);
}
public static void main(String[] args) {
// 类型 声明
MathOperation addition = (int a, int b) -> a + b;
// 类型 不声明
MathOperation subtraction = (a, b) -> a -b;
// 使用大括号,需要有返回值关键字 return
MathOperation multiplication = (a, b) -> {
return a * b;
};
// 不适用大括号,不能使用返回值关键字
MathOperation division = (a, b) -> a / b;
// 不适用圆括号
MessageOperation noParentheses1 = message -> System.out.println(message + mathOperation(10, 5, addition));
noParentheses1.sayMessage("10 + 5 = ");
MessageOperation noParentheses2 = message -> System.out.println(message + mathOperation(10, 5, subtraction));
noParentheses2.sayMessage("10 - 5 = ");
// 使用圆括号
MessageOperation parentheses1 = (message) -> System.out.println(message + mathOperation(10, 5, multiplication));
parentheses1.sayMessage("10 * 5 = ");
MessageOperation parentheses2 = (message) -> System.out.println(message + mathOperation(10, 5, division));
parentheses2.sayMessage("10 / 5 = ");
/** 注意:
1、lambda表达式 主要用来定义 行内执行的方法类型接口,例如.一个简单的方法接口(上面的代码中使用了各种类型的lambda表达式来定义MathOperation接口的方法,最后定义了MessageOperation接口中的sayMessage方法)
2、lambda表达式免去了使用匿名方法的麻烦,并给予java简单而强大的函数化编程能力
*/
// 注意事项:1、lambda表达式参数中不允许声明与局部变量相同的名字
/*
// 这两行是错误代码
int num1 = 1;
MathOperation same = (num1, num2) -> num1 + num2;
*/
}
}
版权声明:本文为ailian_f原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。