使用Lambda表示式的併發程式設計方法


Java SE 8的一個重要補充是lambda表示式功能。使用表示式可以清晰簡潔地表達方法介面。集合庫非常有用。可以迭代集合、過濾集合並提取資料以用於有用的目的。lambda表示式被廣泛用於實現函式式介面。它節省了大量的程式碼。Lambda表示式允許我們提供實現而無需重新定義方法。只有實現程式碼在這裡透過編寫來形成。編譯器不會建立一個.class檔案,因為Java lambda表示式被視為函式。

函式式介面

@FunctionalInterface是Java註解,它宣告一個介面為函式式介面。函式式介面是一個只有一個抽象方法的介面。Lambda表示式允許你實現這個函式式介面。

為什麼要使用Lambda表示式?

  • 它提供了函式式介面的實現。

  • 它減少了程式碼量。

Java Lambda表示式語法

(argument-list)
{
   //body
}

它包含三個組成部分:

  • 引數列表 - 可以為空或非空

  • 箭頭 - 用於連線引數列表和表示式的正文

  • 正文 - 包含lambda表示式的表示式和語句

無引數語法

()
{
   // body of no parameter lambda
}

單引數語法

(p1)
{
   // body of single parameter lambda
}

雙引數語法

(p1,p2)
{
   //body of multiple parameter 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;  
  
      //without lambda, Drawable implementation using anonymous class  
      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 expression with single parameter.  
      Sayable s1=(name)->{  
         return "Hello, "+name;  
      };  
      System.out.println(s1.say("World"));  
          
      // You can omit function parentheses    
      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) {  
          
      // Multiple parameters in lambda expression  
      Addable ad1=(a,b)->(a+b);  
      System.out.println(ad1.add(20,20));  
          
      // Multiple parameters with data type in lambda expression  
      Addable ad2=(int a,int b)->(a+b);  
      System.out.println(ad2.add(200,200));  
   }  
}

輸出

40
400

結論

透過lambda表示式功能,Java SE 8提供了一個寶貴的補充。以清晰簡潔的方式表達方法介面的能力變得輕而易舉。迭代、過濾和提取資料是集合庫提供的許多實際用途之一。實現函式式介面已經廣泛使用lambda表示式,並且它減少了大量的程式碼。lambda表示式的另一個優點是能夠提供實現而無需冗餘的方法重新定義。在這裡,編寫使實現程式碼形成。編譯器不會建立.class檔案,因為Java lambda表示式被視為函式。

更新於:2023年8月1日

65 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.