Filter một List sử dụng Lambda Expression và Stream trong Java

Thông thường trước Java 8, khi chúng ta muốn filter một List nào đó, chúng ta sẽ duyệt qua tất cả các phần tử trong List và dựa vào điều kiện mà chúng ta cần filter, chúng ta sẽ có một List mới theo nhu cầu.

Ví dụ mình có một List chứa thông tin tên sinh viên như sau:

Bây giờ, mình muốn filter List trên để có một List khác chỉ chứa những sinh viên có tên bắt đầu với ký tự “T”, mình sẽ code như sau:

Kết quả:

Filter một List sử dụng Lambda Expression và Stream trong Java

Kể từ Java 8, chúng ta có một cách tốt hơn để làm điều này đó chính là sử dụng Lambda Expression với Stream. Cụ thể là chúng ta sẽ tạo mới đối tượng Stream từ đối tượng List, sau đó sử dụng phương thức filter() của đối tượng Stream để filter.

Tham số của phương thức filter() là một đối tượng của interface Predicate, một Functional Interface. Các bạn có thể xem thêm về interface Predicate ở đây. Và còn một điều nữa là phương thức filter() đóng vai trò là một intermediate operation trong Stream pipeline, do đó chúng ta cần phải thêm một method nữa đóng vai trò là terminal operation.

Ở đây, sau khi filter xong, mình sẽ collect tất cả các phần tử thoả điều kiện vào một List sử dụng phương thức collect() của đối tượng Stream. Phương thức này là teminal operation của Stream pipeline đó các bạn.

Khi đó, kết quả vẫn như vậy:

Filter một List sử dụng Lambda Expression và Stream trong Java

 

Add Comment