| Định nghĩa | |
|---|---|
| Lambda Expression | - Là một biểu thức cú pháp cho phép bạn tạo ra một phương thức ẩn danh (anonymous method) một cách ngắn gọn. - Thường được sử dụng để triển khai các phương thức của các functional interfaces, tức là các interface chỉ chứa một phương thức trừu tượng duy nhất gọi là "abstract method". - Có thể được sử dụng trong nhiều ngữ cảnh khác nhau trong Java, như xử lý sự kiện (event handling), xử lý dữ liệu trong Stream API, triển khai các phương thức của các functional interfaces, và nhiều hơn nữa. - Giúp giảm bớt sự phức tạp của mã nguồn và làm cho mã trở nên dễ đọc hơn, ngắn gọn hơn. |
Dưới đây là cú pháp cơ bản của một lambda expression trong Java:
(parameter_list) -> { lambda_body }
Trong đó:
parameter_list: Danh sách các tham số của phương thức.->: Toán tử lambda, phân tách giữa danh sách tham số và phần thân của lambda.{ lambda_body }: Phần thân của lambda, nơi bạn triển khai logic của phương thức.
Chúng ta có thể viết lambda expression bằng nhiều cách tùy thuộc vào việc sử dụng nó trong một số trường hợp như sau:
| Tùy chọn | Ví dụ | Giải thích |
|---|---|---|
| Không khai báo kiểu dữ liệu: | (x, y) -> x + y | Trình biên dịch tự suy luận kiểu dữ liệu từ giá trị của các tham số. |
| Sử dụng dấu ngoặc (): | name -> System.out.println("Hello, " + name); | Nếu chỉ có một tham số, có thể bỏ qua cặp dấu ngoặc (). |
| Sử dụng dấu ngoặc {}: | (x, y) -> { return x + y; } | Đối với phần thân hàm chỉ có một câu lệnh, có thể bỏ qua dấu ngoặc {}. |
| Tùy chọn không sử dụng lệnh return: | name -> "Hello, " + name | Có thể bỏ qua từ khoá return nếu chỉ có một câu lệnh. |
Dưới đây là các ví dụ cụ thể về cách sử dụng lambda expression :
- Ví dụ biểu thức Lambda với forEach():
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Tạo một danh sách các số nguyên
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
// Sử dụng forEach() và lambda expression để in ra từng phần tử trong danh sách
numbers.forEach(number -> System.out.println(number));
}
}- Ví dụ biểu thức Lambda với sử lí sự kiện:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
// Tạo một JFrame
JFrame frame = new JFrame("Lambda Event Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Tạo một JButton
JButton button = new JButton("Click me!");
// Sử dụng lambda expression để xử lý sự kiện khi nhấn vào nút
button.addActionListener(e -> {
JOptionPane.showMessageDialog(null, "Bạn đã nhấn vào nút!");
});
// Thêm nút vào frame
frame.getContentPane().add(button);
frame.pack();
frame.setVisible(true);
}
}- Ví dụ biểu thức Lambda với Thread:
public class Main {
public static void main(String[] args) {
// Sử dụng lambda expression để tạo một luồng mới
Thread thread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("Thread running: " + i);
}
});
// Bắt đầu chạy luồng
thread.start();
}
}- Ví dụ biểu thức Lambda với Comparator:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Tạo một danh sách các chuỗi
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
names.add("David");
// Sắp xếp danh sách sử dụng Comparator và lambda expression
Collections.sort(names, (String a, String b) -> a.compareTo(b));
// In danh sách đã sắp xếp
System.out.println("Danh sách đã sắp xếp: " + names);
}
}v


Không có nhận xét nào:
Đăng nhận xét