Lambda Expressions trong Java 8
Trong bài này chúng ta sẽ tìm hiểu về Lambda Expressions trong Java 8, đây là tính năng được thêm vào kể từ phiên bản Java SE 8 nên rất mới.

1. Lambda Expression trong Java là gì?
Biểu thức lambda (Lambda Expression) là một tính năng mới được giới thiệu trong Java 8. Biểu thức lambda là một hàm ẩn danh. Một hàm không có tên và không thuộc bất kỳ lớp nào. Khái niệm về biểu thức lambda lần đầu tiên được giới thiệu trong ngôn ngữ lập trình LISP.
Lợi ích khi sử dụng Lambada
Sử dụng Lambda sẽ giúp ta:
- Cung cấp bản implement cho Functional interface.
- Viết ít code hơn.
- Hiệu quả hơn nhờ hỗ trợ thực hiện tuần tự (sequential) và song song (parallel) thông qua Stream API.
Không chỉ có ở Java, Lambda đã được bổ sung ở hầu hết các ngôn ngữ lập trình hiện nay như PHP, Python, C#.
Bài viết này được đăng tại [free tuts .net]
Sự khác nhau giữa Lambda và Method
Một phương thức (hoặc hàm) trong Java có các phần chính sau:
- Tên
- Danh sách thông số
- Phần body
- Return.
Một biểu thức lambda trong Java có các phần chính: Biểu thức Lambda chỉ có nội dung và danh sách tham số.
- Không có tên - chức năng ẩn danh nên chúng tôi không quan tâm đến tên
- Có tham số
- Có phần body.
- Không có return - Trình biên dịch java 8 có thể suy ra kiểu trả về bằng cách kiểm tra mã. bạn không cần phải đề cập đến nó một cách rõ ràng.
2. Cú pháp tạo Lambda Expression trong Java
Để tạo một biểu thức lambda, chúng ta chỉ định các tham số đầu vào (nếu có) ở phía bên trái của toán tử lambda -> và đặt biểu thức hoặc khối câu lệnh ở phía bên phải của toán tử lambda.
Ví dụ: biểu thức lambda (x, y) -> x + y chỉ định rằng biểu thức lambda nhận hai đối số x và y và trả về tổng của chúng.
(parameter_list) -> {function_body}Chúng ta hãy cùng làm một ví dụ với cả hai cách, đó là sử dụng lambda và không sử dụng lambda để xem sự khác nhau nhé.
Không sử dụng biểu thức Lambda: Trước java 8, chúng ta đã sử dụng lớp ẩn danh ActionListener để triển khai phương thức actionPerformed.
import java.awt.*;
import java.awt.event.*;
public class ButtonListenerOldWay {
public static void main(String[] args) {
Frame frame=new Frame("ActionListener Before Java8");
Button b=new Button("Click Here");
b.setBounds(50,100,80,50);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Hello World!");
}
});
frame.add(b);
frame.setSize(200,200);
frame.setLayout(null);
frame.setVisible(true);
}
}Bằng cách sử dụng biểu thức Lambda: Thay vì tạo lớp bên trong ẩn danh, chúng ta có thể tạo biểu thức lambda như thế này
import java.awt.*;
public class ButtonListenerNewWay {
public static void main(String[] args) {
Frame frame=new Frame("ActionListener java8");
Button b=new Button("Click Here");
b.setBounds(50,100,80,50);
b.addActionListener(e -> System.out.println("Hello World!"));
frame.add(b);
frame.setSize(200,200);
frame.setLayout(null);
frame.setVisible(true);
}
}Code sẽ đơn giản và ngắn gọn hơn rất nhiều.
3. Ví dụ khác về Lambda Expression trong Java
Hãy tham khảo một vài ví dụ dưới đây để hiểu rõ hơn về cách sử dụng lambada trong ngôn ngữ Java 8.
Ví dụ 1: Lambda function không có tham số
@FunctionalInterface
interface MyFunctionalInterface {
//A method with no parameter
public String sayHello();
}
public class Example {
public static void main(String args[]) {
// lambda expression
MyFunctionalInterface msg = () -> {
return "Hello";
};
System.out.println(msg.sayHello());
}
}Ví dụ 2: Lambda function với một tham số
@FunctionalInterface
interface MyFunctionalInterface {
//A method with single parameter
public int incrementByFive(int a);
}
public class Example {
public static void main(String args[]) {
// lambda expression with single parameter num
MyFunctionalInterface f = (num) -> num+5;
System.out.println(f.incrementByFive(22));
}
}Ví dụ 3: Lambda function với nhiều tham số
interface StringConcat {
public String sconcat(String a, String b);
}
public class Example {
public static void main(String args[]) {
// lambda expression with multiple arguments
StringConcat s = (str1, str2) -> str1 + str2;
System.out.println("Result: "+s.sconcat("Hello ", "World"));
}
}Ví dụ 4: Tạo nhiều lambda trong vòng lặp forEach.
import java.util.*;
public class Example{
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("Rick");
list.add("Negan");
list.add("Daryl");
list.add("Glenn");
list.add("Carl");
list.forEach(
// lambda expression
(names)->System.out.println(names)
);
}
}Việc sử dụng biểu thức lambda trong lập trình là rất quan trọng nên hầu hết các ngôn ngữ hiện nay đều có tính năng này. Nếu bạn đang học các ngôn ngữ khác thì cũng có thể search với từ khóa lambda function + tên ngôn ngữ.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng