JAVA 8
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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:

  1. Tên
  2. Danh sách thông số
  3. Phần body
  4. 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ố.

  1. 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
  2. Có tham số
  3. Có phần body.
  4. 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.

Cú pháp
(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ùng chuyên mục:

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Cách sử dụng Spring  Scheduled trong Spring Boot

Cách sử dụng Spring Scheduled trong Spring Boot

Cách dùng Groovy trong Spring Boot Java

Cách dùng Groovy trong Spring Boot Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo ứng dụng Chat với Spring Boot và Websocket

Tạo ứng dụng Chat với Spring Boot và Websocket

Sử dụng JUnit để tạo unit test trong Spring Boot

Sử dụng JUnit để tạo unit test trong Spring Boot

Cách triển khai Spring Boot trên Tomcat Server

Cách triển khai Spring Boot trên Tomcat Server

Cách test RESTful API trong Spring Boot

Cách test RESTful API trong Spring Boot

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Top