Biểu thức Lambda trong Java 8

0
340

Biểu thức Lambda được giới thiệu trong Java 8 và được coi là tính năng lớn nhất của Java 8. Biểu thức lambda tạo điều kiện thuận lợi cho việc lập trình hàm và đơn giản hóa việc phát triển rất nhiều.

Cú pháp

Một biểu thức lambda được đặc trưng bởi cú pháp sau.

parameter -> expression body

Sau đây là các đặc điểm quan trọng của biểu thức lambda.

  • Khai báo kiểu tùy chọn – Không cần khai báo kiểu của một tham số. Trình biên dịch có thể suy luận tương tự từ giá trị của tham số.
  • Dấu ngoặc tùy chọn xung quanh tham số – Không cần khai báo một tham số duy nhất trong dấu ngoặc đơn. Đối với nhiều tham số, dấu ngoặc đơn là bắt buộc.
  • Dấu ngoặc nhọn tùy chọn – Không cần sử dụng dấu ngoặc nhọn trong phần thân biểu thức nếu phần thân chứa một câu lệnh đơn.
  • Từ khóa trả về tùy chọn – Trình biên dịch tự động trả về giá trị nếu phần nội dung có một biểu thức duy nhất để trả về giá trị. Dấu ngoặc nhọn được yêu cầu để chỉ ra rằng biểu thức trả về một giá trị.

Ví dụ về biểu thức Lambda

Tạo chương trình Java sau bằng cách sử dụng bất kỳ trình soạn thảo nào bạn chọn trong C: \> 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);
}
}

Xác minh kết quả

Biên dịch lớp bằng trình biên dịch javac như sau:

C:\JAVA>javac Java8Tester.java

Bây giờ chạy Java8Tester như sau:

C:\JAVA>java Java8Tester

Nó sẽ tạo ra kết quả sau:

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

Sau đây là những điểm quan trọng cần được xem xét trong ví dụ trên.

  • Biểu thức Lambda được sử dụng chủ yếu để xác định việc triển khai nội tuyến của một giao diện chức năng, tức là một giao diện chỉ có một phương thức duy nhất. Trong ví dụ trên, chúng tôi đã sử dụng nhiều loại biểu thức lambda khác nhau để xác định phương thức hoạt động của giao diện MathOperation. Sau đó, chúng tôi đã xác định việc triển khai sayMessage của GreetingService.
  • Biểu thức Lambda loại bỏ sự cần thiết của lớp ẩn danh và cung cấp khả năng lập trình chức năng rất đơn giản nhưng mạnh mẽ cho Java.

Phạm vi

Sử dụng biểu thức lambda, bạn có thể tham chiếu đến bất kỳ biến cuối cùng nào hoặc biến cuối cùng hiệu quả (chỉ được gán một lần). Biểu thức Lambda ném một lỗi biên dịch, nếu một biến được gán giá trị lần thứ hai.

Ví dụ về phạm vi

Tạo chương trình Java sau bằng cách sử dụng bất kỳ trình soạn thảo nào bạn chọn trong C: \> 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);
}
}

Xác minh kết quả

Biên dịch lớp bằng trình biên dịch javac như sau:

C:\JAVA>javac Java8Tester.java

Bây giờ chạy Java8Tester như sau:

C:\JAVA>java Java8Tester

Nó sẽ tạo ra kết quả sau:

Hello! Mahesh

Khóa học Java Full stack (IJFD)

LEAVE A REPLY

Please enter your comment!
Please enter your name here