Java8 的 Lambda 表达式
程序员文章站
2022-06-10 22:54:14
...
背景
Lambda 表达式是 Java8 发布的一个很重要的原因,从 Java8 开始允许将一个方法以变量的形式作为参数进行传递,并且使用这种表达式让 Java 代码变得更加的简洁。
语法格式
(params) -> expression
(params) -> {
expression}
如果语句中 expression 表达式只有一句则不必使用 {} 也可以,另外还有一种就是没有参数的情况。
() -> {
expression} 或是 () -> expression
示例
- 使用 (params) -> expression 的方式进行表达式计算
publicstaticvoidmain(String[] args) {
Method method1 = (int a,int b) -> a + b;
int res1 = method1.math(2, 3);
System.out.println(res1);
Method method2 = (int a,int b) -> a * b;
int res2 = method2.math(2, 3);
System.out.println(res2);
}
public interface Method{
publicintmath(int a,int b);
}
没有 {} 的表达式,必须是只有一句表达式的时候才可以这样返回,否则便会报错。
- 使用 (params) -> {expression} 的方式进行表达式计算
publicstaticvoidmain(String[] args) {
Method method1 = (int a,int b) -> {
return (a + b); };
int res1 = method1.math(2, 3);
System.out.println(res1);
Method method2 = (int a,int b) -> {
return (a * b); };
int res2 = method2.math(2, 3);
System.out.println(res2);
}
public interface Method{
publicintmath(int a,int b);
}
在使用这种表达式的时候必须进行明确的指定返回的是什么,比如 return (a + b)、return (a * b) 都是要明确返回什么内容。
注意:Lambda 表达式执行完以后总体返回的必须是一个接口,比如上述中的 Method 接口。
变量作用域
在使用 Lambda 表达式时,很重要的一点就是关于变量的作用域。在表达式中如果需要引用外部变量进行运算则必须加上 final 关键字才可以,如果不加 final 时则在向后的编码中不能改变这个变量的值,如下进行举例:
publicstaticvoidmain(String[] args){
final int c = 3;
Method method1 = (int a,int b) -> {
return (a + b + c); };
int res1 = method1.math(2, 3);
System.out.println(res1);
}
public interfaceMethod{
publicintmath(int a,int b);
}
将变量 c 引用到表达式中,则给变量 c 加上 final 关键字使其不能改变。
publicstaticvoidmain(String[] args) {
int c = 3;
Method method1 = (int a,int b) -> {
return (a + b + c); };
int res1 = method1.math(2, 3);
System.out.println(res1);
c = 10;
}
public interface Method{
publicintmath(int a,int b);
}
将变量 c 引用到表达式中,并且在后续的执行中又给 c 变量赋值为 10,这种形式在 Lambda 表达式使用时便会报错。
展望
欢迎关注 “老王说编程“,每天进步一点点,您的每一个点赞、在看、分享都是在致力于减少 “攻城狮” 产出的 BUG。
上一篇: day_25I/O输入输出
下一篇: 原珍向天果:果子虽然丑 降血糖绝不含糊