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.

1) 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 ",".

2) 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.

3) 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

  1. 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).
  2. 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

https://www.javatpoint.com/java-lambda-expressions

Related article