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