- Giới thiệu
- Khái quát
- Cách sử dụng
- forEach
- map
- filter
- limit
- sorted
- collect
- Xử lý song song
- Bản chất của Stream
- Lời kết
Giới thiệu
Stream
là một trong những concept được coi là đem sự thay đổi lớn nhất trong Java 8
. Để có thể hiểu được nội dung này trọn vẹn, mình đề nghị các bạn đọc trước các khái niệm sau:
Khái quát
Stream
là một abtract layer cho phép bạn xử lý một dòng dữ liệu dựa trên các thao tác đã định nghĩa trước.
Bạn có thể tạo Stream
từ các nguồn dữ liệu như Collections
, Arrays
hoặc I/O resources
.
Mặc định các lớp kế thừa của Collection
đều có hàm .stream()
:
Cách sử dụng
Chức năng của Stream
là cực kì đa dạng giúp bạn thao tác dữ liệu dễ dàng hơn.
forEach
Duyệt qua toàn bộ dữ liệu của bạn
map
Tạo ra các giá trị mới từ dữ liệu hiện có
filter
filter()
gíup chúng ta thao tác với những dữ liệu mong muốn
limit
Giới hạn số lượng dữ liệu cần xử lý
sorted
sắp xếp Stream
Bạn có thể tự định nghĩa cách sort bằng cách thêm Comparator vào
collect
collect
giúp chúng ta lấy toàn bộ dữ liệu đã biến đổi trong Stream
thành đối tượng mình mong muốn
Xử lý song song
Bản chất của Stream
Bạn hãy chạy chương trình này nhé
Kết quả:
Bạn sẽ thấy rằng chương trình chỉ xử lý dữ liệu vừa đủ thoả mãn điều kiện limit(3)
mà thôi, còn lại nó sẽ bỏ qua để tối ưu hoá performance.
Chứng tỏ Stream
là Lazy evaluation
. Hiểu đơn giản là nó sẽ không xử lý dữ liệu trực tiếp qua từng bước, mà chờ bạn khai báo xong tất cả các thao tác operation
như map
, filter
,v.v.. cho tới khi gặp lệnh .collect()
thì nó thực hiện toàn bộ trong một vòng lặp duy nhất.
Hàm .collect()
và một số hàm như min()
, max()
, count()
được gọi là terminal operation
. Khi gọi những function có dạng terminal
thì Stream
mới chính thức hoạt động.
Một lưu ý khi sử dụng là Stream không được tái sử dụng. Ví dụ:
Vì Stream
được tạo ra để xử lý dữ liệu chứ không phải để lưu trữ!
Nên muốn sử dụng, mỗi lần bạn sẽ cần tạo ra 1 Stream
mới.
Lời kết
Tới đây là bạn đã có thể sử dụng Stream
để giúp code của mình bá đạo hơn bao giờ hết rồi đấy!
Chúc bạn thành công, và chớ quên chia sẻ cho bạn bè nhé, ohoho :3