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#.

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:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top