Tìm hiểu Lambda Expression trong Java 8
I. Lambda Expression là gì?
- Lambda Expression là một tính năng mới được thêm vào từ phiên bản Java 8.
- Đây là một trong những tính năng nổi bật nhất của Java 8, giúp cho code trở nên đơn giản, rút gọn đi rất nhiều.
- Có cú pháp khá quen thuộc như Arrow Function (JS), Sort Arrow Functions (PHP).
II. Cú pháp
(argument-list) -> {body}
Lambda Expression được cấu tạo từ 3 thành phần chính.
-
Argument-list (Danh sách tham số) : Có thể rỗng, hoặc có một hay nhiều tham số. Mỗi tham số được cách nhau bởi dấu ",".
-
Arrow-token (Toán tử mũi tên): Bắt buộc, dùng để nối phần tham số và thân hàm.
-
Body (Nội dung): Là một khối lệnh hoặc một biểu thức.
Không có tham số:
() -> System.out.println("hello world"); // Nếu thân hàm chỉ có 1 dòng thì không cần đến cặp ngoặc nhọn
Một tham số:
(int a) -> {
System.out.println(a * a);
}
Nhiều tham số:
(int x, int y) -> {
int max = x > y ? x: y;
return max;
}
III. Ứng dụng
- Lambda Expression để implement functional interface. Đây là interface chỉ có một phương thức abstract, hay có cách gọi khác là Single Abstract Interface (SAM).
- Lợi ích chính của functional interface là chúng ta có thể sử dụng Lambda Expression để tạo ra thể hiện (instance) cho interface đó.
@FunctionalInterface // Annotation không bắt buộc
interface Drawable {
public void draw();
}
public class LambdaExpressionExample {
public static void main(String[] args) {
int width = 10;
Drawable d2 = ()-> {
System.out.println("Drawing "+ width);
};
d2.draw();
}
}
KQ: Drawing 10
3. Lambda Expression còn được sử dụng thường xuyên khi làm việc với Collection, Stream như lặp mảng, sắp xếp các phần tử...
Integer[] array = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(array);
list.forEach(n -> System.out.println(n));
KQ:
1
2
3
Dùng anonymous inner class Comparator để sắp xếp:
listDevs.sort(new Comparator<Developer>() {
@Override
public int compare(Developer o1, Developer o2) {
return o2.getAge() - o1.getAge();
}
});
Dùng Lambda:
listDevs.sort((Developer o1, Developer o2) -> o1.getAge()-o2.getAge());
IV. Lời kết
- Lambda Expression là một tính năng đơn giản nhưng vô cùng hữu ích mà mọi lập trình viên nên nắm rõ.
- Bài viết được viết dựa trên hiểu biết cá nhân nên còn nhiều sai sót cũng như hạn chế, mong được mọi người góp ý thêm.
- Mong có thể gặp lại các bạn ở những bài viết sau với những tính năng khác của java 8 như: Stream API, Optional Class...
V. Nguồn tham khảo:
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html