Java tut 44: Java Lambda
Biểu thức Java Lambda
Biểu thức Lambda đã được thêm vào Java 8.
Biểu thức lambda là một khối mã ngắn nhận tham số và trả về giá trị. Các biểu thức Lambda tương tự như các phương thức, nhưng chúng không cần tên và chúng có thể được triển khai ngay trong phần thân của một phương thức.
Cú pháp
Biểu thức lambda đơn giản nhất chứa một tham số duy nhất và một biểu thức:
parameter -> expression
Để sử dụng nhiều hơn một tham số, hãy đặt chúng trong dấu ngoặc đơn:
(parameter1, parameter2) -> expression
Diễn đạt bị hạn chế. Chúng phải trả về ngay một giá trị và chúng không thể chứa các biến, phép gán hoặc câu lệnh như if
hoặc for
. Để thực hiện các hoạt động phức tạp hơn, một khối mã có thể được sử dụng với các dấu ngoặc nhọn. Nếu biểu thức lambda cần trả về một giá trị, thì khối mã phải có một return
câu lệnh.
(parameter1, parameter2) -> { code block }
Sử dụng biểu thức Lambda
Biểu thức lambda thường được truyền dưới dạng tham số cho một hàm:
Thí dụ
Sử dụng biểu thức lamba trong phương thức ArrayList
‘s forEach()
để in mọi mục trong danh sách:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
Các biểu thức Lambda có thể được lưu trữ trong các biến nếu kiểu của biến là một giao diện chỉ có một phương thức. Biểu thức lambda phải có cùng số lượng tham số và cùng kiểu trả về với phương thức đó. Java có nhiều loại giao diện được tích hợp sẵn, chẳng hạn như Consumer
giao diện (được tìm thấy trong java.util
gói) được sử dụng bởi các danh sách.
Thí dụ
Sử dụng Consumer
giao diện của Java để lưu trữ một biểu thức lambda trong một biến:
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach( method );
}
}
Để sử dụng biểu thức lambda trong một phương thức, phương thức phải có một tham số với giao diện một phương thức làm kiểu của nó. Việc gọi phương thức của giao diện sẽ chạy biểu thức lambda:
Thí dụ
Tạo một phương thức lấy biểu thức lambda làm tham số:
interface StringFunction { String run(String str);
} } } }public class Main { public static void main(String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted("Hello", exclaim); printFormatted("Hello", ask);
public static void printFormatted(String str, StringFunction format) { String result = format.run(str); System.out.println(result);