欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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。

 

Java8 的 Lambda 表达式
            
    
    博客分类: 编程杂谈 java8lambda 表达式