Java 8 - Ekspresi Lambda

Ekspresi Lambda diperkenalkan di Java 8 dan disebut-sebut sebagai fitur terbesar dari Java 8. Ekspresi Lambda memfasilitasi pemrograman fungsional, dan banyak menyederhanakan pengembangan.

Sintaksis

Ekspresi lambda dicirikan oleh sintaks berikut.

parameter -> expression body

Berikut adalah karakteristik penting dari ekspresi lambda.

  • Optional type declaration- Tidak perlu mendeklarasikan tipe parameter. Kompilator dapat melakukan inferensi yang sama dari nilai parameter.

  • Optional parenthesis around parameter- Tidak perlu mendeklarasikan parameter tunggal dalam tanda kurung. Untuk beberapa parameter, diperlukan tanda kurung.

  • Optional curly braces - Tidak perlu menggunakan kurung kurawal pada badan ekspresi jika badan berisi pernyataan tunggal.

  • Optional return keyword- Kompilator secara otomatis mengembalikan nilai jika badan memiliki ekspresi tunggal untuk mengembalikan nilai. Tanda kurung kurawal diperlukan untuk menunjukkan bahwa ekspresi mengembalikan nilai.

Contoh Ekspresi Lambda

Buat program Java berikut menggunakan editor pilihan Anda di, misalnya, C: \> JAVA.

Java8Tester.java

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester tester = new Java8Tester();
		
      //with type declaration
      MathOperation addition = (int a, int b) -> a + b;
		
      //with out type declaration
      MathOperation subtraction = (a, b) -> a - b;
		
      //with return statement along with curly braces
      MathOperation multiplication = (int a, int b) -> { return a * b; };
		
      //without return statement and without curly braces
      MathOperation division = (int a, int b) -> a / b;
		
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
		
      //without parenthesis
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
		
      //with parenthesis
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
		
      greetService1.sayMessage("Mahesh");
      greetService2.sayMessage("Suresh");
   }
	
   interface MathOperation {
      int operation(int a, int b);
   }
	
   interface GreetingService {
      void sayMessage(String message);
   }
	
   private int operate(int a, int b, MathOperation mathOperation) {
      return mathOperation.operation(a, b);
   }
}

Verifikasi Hasilnya

Kompilasi kelas menggunakan javac kompiler sebagai berikut -

C:\JAVA>javac Java8Tester.java

Sekarang jalankan Java8Tester sebagai berikut -

C:\JAVA>java Java8Tester

Ini harus menghasilkan keluaran berikut -

10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

Berikut adalah poin-poin penting yang harus diperhatikan dalam contoh di atas.

  • Ekspresi Lambda digunakan terutama untuk mendefinisikan implementasi inline dari antarmuka fungsional, yaitu antarmuka dengan metode tunggal saja. Dalam contoh di atas, kami telah menggunakan berbagai jenis ekspresi lambda untuk menentukan metode operasi antarmuka MathOperation. Kemudian kita telah mendefinisikan implementasi sayMessage dari GreetingService.

  • Ekspresi Lambda menghilangkan kebutuhan akan kelas anonim dan memberikan kemampuan pemrograman fungsional yang sangat sederhana namun kuat ke Java.

Cakupan

Dengan menggunakan ekspresi lambda, Anda dapat merujuk ke variabel akhir atau variabel akhir secara efektif (yang hanya diberikan sekali). Ekspresi Lambda memunculkan kesalahan kompilasi, jika variabel diberi nilai untuk kedua kalinya.

Contoh Ruang Lingkup

Buat program Java berikut menggunakan editor pilihan Anda di, misalnya, C: \> JAVA.

Java8Tester.java

public class Java8Tester {

   final static String salutation = "Hello! ";
   
   public static void main(String args[]) {
      GreetingService greetService1 = message -> 
      System.out.println(salutation + message);
      greetService1.sayMessage("Mahesh");
   }
	
   interface GreetingService {
      void sayMessage(String message);
   }
}

Verifikasi Hasilnya

Kompilasi kelas menggunakan javac kompiler sebagai berikut -

C:\JAVA>javac Java8Tester.java

Sekarang jalankan Java8Tester sebagai berikut -

C:\JAVA>java Java8Tester

Ini harus menghasilkan keluaran berikut -

Hello! Mahesh