- vừa được xem lúc

Lambda expression trong Java là cái giề?

0 0 18

Người đăng: Thanh Tùng Vũ

Theo Viblo Asia

Hãy nghĩ về lambda expression như một cú pháp rút gọn cho compiler (tương tự như khi ta lập trình trên các IDE, chỉ cần gõ psvm + Tab sẽ ra được hàm “public static void main(String[] args)”), khi compiler thấy cú pháp lambda, nó sẽ mở rộng ra thành hai phần: phần định nghĩa class và phần khởi tạo class.
Nếu bạn nghĩ nó như một công cụ để rút ngắn code lại, bạn sẽ yêu thích nó, đến mức mà bạn sẽ tìm đủ mọi cách tận dụng nó bất cứ khi nào có thể.
Hãy xem thử một ví dụ đơn giản về một trung tâm mua bán xe hơi CarMall, nơi có rất nhiều Car khác nhau:

public class CarMall { private List<Car> cars; public CarMall() { cars = new ArrayList<>(); cars.add(new Car("Honda", "City 2021")); cars.add(new Car("Honda", "Civic 2021")); cars.add(new Car("Honda", "Accord")); cars.add(new Car("Honda", "CRV")); cars.add(new Car("Toyota", "Vios")); cars.add(new Car("Honda", "Fortuner Legender")); cars.add(new Car("Honda", "Innova")); } public void showCars(CarFilter filter) { for(Car car: cars){ if(filter.confirm(car)) System.out.println(car); } }
}

Trong đó, CarFilter:

public interface CarFilter { boolean confirm(Car car);
}

Với Car:

public class Car { private String producer; private String name; public Car(String producer, String name) { this.producer = producer; this.name = name; } public String getProducer() { return producer; } public String getName() { return name; }
}

Nếu làm như cách thông thường, ta sẽ tạo một class implement interface CarFilter:

public class CarFilterImpl implements CarFilter { private String producer; public CarFilterImpl(String producer) { this.producer = producer; } @Override public boolean confirm(Car car) { return this.producer.equals(car.getProducer()); }
}

Khi đó, đoạn code để in ra tất cả car hãng Honda là:

CarMall carMall = new CarMall();
CarFilter carFilter = new CarFilterImpl("Honda");
carMall.showCars(carFilter);

Tuy nhiên, nếu sử dụng lambda expression, ta không cần khởi tạo class implement CarFilter, và code để in ra các car hãng Honda chỉ cần:

CarMall carMall = new CarMall();
carMall.showCars(c -> c.getProducer().equals("Honda"));

Cách này giúp giảm tải khoảng chục dòng code (do không phải khởi tạo CarFilterImpl).
Nhưng tại sao? Sao ta có thể code như vậy mà trình biên dịch vẫn hiểu?
Thực chất, tất cả thông tin cần có để “mở rộng” đã có sẵn trong function carMall.showCars(...). Trình biên dịch biết rằng nó cần truyền một đối tượng của class implement CarFilter interface vào trong function showCars(CarFilter filter), và rằng đối tượng này cần implement function:* boolean confirm(Car car)* bởi nó là function duy nhất trong interface. Nó cũng biết rằng nội dung trong hàm sẽ tương đương với expression: c -> c.getProducer().equals("Honda").
Từ đó, trình biên dịch sẽ tự động tạo ra một đoạn code như sau:

Class XYZ implements CarFilter { public boolean confirm(Car car) { return car.getProducer().equals(“Honda”); }
}

Và thế là chương trình chạy ngon lành !! Vậy đấy, lambda thực chất rất đơn giản phải không ???

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 277

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 257

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 37

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 180

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 55

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 124