Java 8 - Lambda Expression
Lambda Expression là gì?
Lambda Expression là một cách để biểu diễn các hàm ẩn danh (anonymous functions) trong Java. Nó cho phép bạn truyền một khối mã (code block) dưới dạng tham số mà không cần định nghĩa một phương thức đầy đủ trong một lớp. Nói cách khác, Lambda Expression là một cách viết ngắn gọn của các đối tượng triển khai giao diện chức năng (functional interface) - tức là giao diện chỉ có duy nhất một phương thức trừu tượng.
- Cú pháp cơ bản của Lambda Expression:
(parameters) -> expression
// hoặc
(parameters) -> { statements; }
- Ví dụ:
// Thay vì viết:
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Đang chạy!");
}
};
// Với Lambda Expression:
Runnable runnable = () -> System.out.println("Đang chạy!");
- Đặc điểm chính
-
Ngắn gọn: Loại bỏ sự dài dòng của các lớp ẩn danh (anonymous classes).
-
Dễ đọc: Mã nguồn trở nên trực quan hơn, đặc biệt khi làm việc với các API như Stream hoặc Collections.
-
Hỗ trợ lập trình hàm: Kết hợp với các tính năng như Stream API, Lambda giúp xử lý dữ liệu theo kiểu hàm một cách hiệu quả.
- Ví dụ thực tế
Hãy xem cách sử dụng Lambda Expression với Stream API để lọc và in các số chẵn từ một danh sách:
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
// Sử dụng Lambda để lọc số chẵn
numbers.stream()
.filter(n -> n % 2 == 0)
.forEach(n -> System.out.println(n));
}
}
Kết quả:
2
4
6
Ở đây, n -> n % 2 == 0 là một Lambda Expression kiểm tra số chẵn, và n -> System.out.println(n) là Lambda để in kết quả.
Lợi ích của Lambda Expression
-
Giảm mã lặp: Không cần viết lại các lớp ẩn danh phức tạp.
-
Tăng tính linh hoạt: Dễ dàng truyền hành vi (behavior) như một tham số.
-
Hỗ trợ song song: Kết hợp với Stream API, Lambda giúp xử lý dữ liệu song song hiệu quả hơn.
Khi nào nên dùng?
Lambda Expression đặc biệt hữu ích khi làm việc với:
-
Các giao diện chức năng như Runnable, Comparator, Consumer, Predicate, v.v.
-
Xử lý tập hợp dữ liệu lớn với Stream API.
-
Các tình huống cần truyền hành vi thay vì dữ liệu.
Hạn chế
-
Không phù hợp với các logic phức tạp (nên dùng phương thức truyền thống để dễ bảo trì).
-
Có thể khó hiểu với người mới bắt đầu.
Kết luận
Lambda Expression trong Java 8 không chỉ là một công cụ cú pháp mà còn là cầu nối đưa Java tiến gần hơn đến lập trình hàm. Khi sử dụng đúng cách, nó giúp mã nguồn trở nên thanh thoát, hiện đại và dễ bảo trì. Nếu bạn đang học hoặc làm việc với Java, việc nắm vững Lambda Expression là một kỹ năng không thể bỏ qua!