使用 Lambda 表达式的并发编程方法

javaobject oriented programmingprogramming更新于 2024/11/8 13:32:17

Java SE 8 的一个重要新增功能是 lambda 表达式功能。使用表达式可以清晰简洁地表达方法接口。集合库非常有用。可以迭代、过滤集合并提取数据以用于有用的目的。为了实现功能接口,lambda 表达式被广泛使用。它节省了大量代码。Lambda 表达式允许我们提供实现,而无需重新定义方法。只有实现代码通过编写在这里成形。编译器不会创建。因为 Java lambda 表达式被视为函数 .class 文件。

功能接口

@FunctionalInterface 是一个 Java 注释,它将接口声明为功能接口。功能接口是只有一个抽象方法的接口。 Lambda 表达式允许您实现此功能接口。

为什么使用 Lambda 表达式?

  • 它提供功能接口的实现。

  • 它提供更少的编码。

Java Lambda 表达式语法

(argument-list)
{
    //body
}

它由三个组件组成 -

  • Argument-List - 可以为空或非空

  • Arrow-Taken - 用于链接表达式的 Argument-list 和主体

  • Body - 包含 lambda 的表达式和语句表达式

无参数语法

()
{
    // 无参数 lambda 的主体
}

单参数语法

(p1)
{
    // 单参数 lambda 的主体
}

双参数语法

(p1,p2)
{
    // 多参数 lambda 的主体
}

示例:Java Lambda 表达式

@FunctionalInterface  //It is optional  
interface Drawable{  
   public void draw();  
}  
  
public class LambdaExpressionExample2 {  
   public static void main(String[] args) {  
      int width=10;  
          
      //with lambda  
      Drawable d2=()->{  
         System.out.println("Drawing "+width);  
      };  
      d2.draw();  
   }  
}

输出

Drawing 10

示例:不使用 Lambda 表达式

interface Drawable{  
   public void draw();  
}  
public class LambdaExpressionExample {  
   public static void main(String[] args) {  
      int width=10;  
  
      //不使用 lambda,使用匿名类实现 Drawable
      Drawable d=new Drawable(){  
         public void draw(){System.out.println("Drawing "+width);}  
      };  
      d.draw();  
   }  
}

输出

Drawing 10

示例:无参数

interface Sayable{  
   public String say();  
}  
public class LambdaExpressionExample3{  
   public static void main(String[] args) {  
      Sayable s=()->{  
         return "Don’t settle for average.";  
      };  
      System.out.println(s.say());  
   }  
}

输出

Don’t settle for average

示例:单个参数

interface Sayable {
    public String say(String name);
    }
    
    public class LambdaExpressionExample4{
        public static void main(String[] args) {
        
        // 具有单个参数的 Lambda 表达式。
        Sayable s1=(name)->{
        return "Hello, "+name;
        };
        System.out.println(s1.say("World"));
        
        // 您可以省略函数括号
        Sayable s2= name ->{
        return "Hello, "+name;
        };
        System.out.println(s2.say("World"));
    }
}

输出

Hello, World
Hello, World

示例:多个参数

interface Addable{  
   int add(int a,int b);  
}  
  
public class LambdaExpressionExample5{  
   public static void main(String[] args) {  
          
        // lambda 表达式中有多个参数
        Addable ad1=(a,b)->(a+b);
        System.out.println(ad1.add(20,20));
        
        // lambda 表达式中有多个具有数据类型的参数
        Addable ad2=(int a,int b)->(a+b);
        System.out.println(ad2.add(200,200));
   }  
}

输出

40
400

结论

使用表达式,Java SE 8 通过 lambda 表达式功能提供了有价值的补充。以清晰简洁的方式表达方法接口的能力已变得毫不费力。迭代、过滤和提取数据是集合库提供的众多实际用途之一。实现函数式接口已经广泛使用 lambda 表达式,并且它大大减少了代码量。lambda 表达式的一个出色特性是能够给出实现而无需重复定义冗余方法。在这个空间中,书写赋予实现代码其形式。编译器不会创建任何内容,因为不会形成 .class 文件。因为函数被视为 Java lambda 表达式。


相关文章


有用资源