18/12/2018, 23:00

Tuốt tuồn tuột về Stream trong Java8

Người viết: Kien Nguyen 1. Stream là gì? 1.1 Một câu chuyện nhỏ và định nghĩa. Chuyện rằng ngày nảy ngày nay, ở phường 3, quận Tân Bình có thằng Tèo , nhà giàu tổ bố, nhà cực nhiều xe, nó có một List 10 chiếc xe với thông tin ngày bảo hành gần nhất. Đến hạn bảo dưỡng, vì ...

Người viết: Kien Nguyen

1. Stream là gì?

1.1 Một câu chuyện nhỏ và định nghĩa.

Chuyện rằng ngày nảy ngày nay, ở phường 3, quận Tân Bình có thằng Tèo, nhà giàu tổ bố, nhà cực nhiều xe, nó có một List 10 chiếc xe với thông tin ngày bảo hành gần nhất.

Đến hạn bảo dưỡng, vì không lành nghề IT nên Tèo nhờ Tồ (kỹ sư công nghệ thông tắc hệ thống thoát nước) kiểm tra xem xe nào đến hạn bảo hành.

Với số lượng 10 chiếc, Tồ nhanh trí sử dụng Iterator next() kiểm tra trên từng chiếc xe, mọi việc đơn giản, Tồ lụm 2 củ.

Qua hôm sau, thằng  kế bên kêu thằng Tồ tới làm vố này to, Tồ nhanh chân đề máy tới nhà Tí, vừa mới xem cái List thằng Tí đưa ra, nó loạng quạng, chân đứng không vững (10.000.000 xe). Hóa ra, bố thằng Tí làm chủ bãi xe phế liệu, bố nó không bảo trì mà muốn kiếm xe chưa hết hạn lưu thông.

Máy yếu, sử dụng Iterator next() thì chắc là không ổn. Đang ngồi suy nghĩ miên man, sực một giọng nói vang lên phía sau lưng Tồ, “lẹ đi mày, tao còn có việc đi nữa”.

Bí quá, làm sao nhanh được?, Tồ tự hỏi. Bỗng nhiên sực nhớ Viblo có chuỗi bài Tuốt tuồn tuột, Tồ nhanh trí đọc bài “Tuốt tuồn tuột về Java Stream”, bật máy lên dùng ngay Parallel Stream. Vụt, kết quả xuất hiện rồi sao?, sao nhanh vậy được?, Tồ tự hỏi.

Kết quả có thật, nhưng xui vl, không còn chiếc nào còn hạn bảo hành, Tí đưa Tồ 20k rồi nói “CÚTTTTTT”

Tồ thật không may, tuy nhiên tồ cũng đã hiểu và biết cách sử dụng stream, tối đó Tồ ngủ ngon lắm. HÃY NHƯ TỒ.

Vậy stream là gì?. Định nghĩa đơn giản như sau:

Stream represents a sequence of objects from a source, which supports aggregate operations.

Stream là đại diện cho mỗi chuỗi các đối tượng từ một nguồn, hỗ trợ các hoạt động tổng hợp.

“Nguồn” ở đây là danh sách xe của Tèo và Tí. còn các “hoạt động tổng hợp” ở đây là phương thức filter (hôm này – ngày bảo hành gần nhất > 10) giúp tìm ra các xe hết hạn lưu thông.

1.2 Các đặc điểm của stream.

  • Source: dữ liệu nguồn có thể là từ Array, List, I/O
  • Tự động lặp lại phương thức đối với các phần tử có được từ collection.
  • Hỗ trợ các phương thức như filter, map, limit, reduce, find, match, …

1.3 Có gì hơn collection?

1. No Storage – không lưu trữ

A stream is not a data structure that stores elements; instead, it conveys elements from a source such as a data structure, an array, a generator function, or an I/O channel, through a pipeline of computational operations.

Stream không phải là cấu trúc dữ liệu lưu trữ các phần tử, thay vào đó, nó truyền tải các phần tử này thành các kiểu dữ liệu khác như mảng, hàm hoặc kênh I/O, thông qua một hệ thống luồng tính toán.

Giải nghĩa: Collection là một cấu trúc dữ liệu (có thể là ArrayList, LinekedList), còn stream thì chỉ như là công cụ xử lí. Nếu ta có danh sách 10 tên tội phạm thì collection sẽ trực tiếp lưu các phần tử vào ArrayList, còn stream chỉ giúp ta filter() những tên tội phạm ma túy, sort() theo thứ tự ngày phạm tội, …

Stream không trực tiếp lưu trữ những phần tử này, nó luôn cần source (dữ liệu đầu vào) để xử lí.

2. Functional in nature.

An operation on a stream produces a result, but does not modify its source.

Stream luôn cho ra kết quả, nhưng không sửa đổi đầu vào.

Giải nghĩa:

Giả sử ta có một colection 10 pornstar name, vì thích hàng còn mới nên ta sử dụng stream để lọc bớt các cô có số lượng phim đóng lớn hơn 5, kết quả stream cho ra 3 cô. Mặc dù kết quả stream là 3, nhưng nó không tác động tới dữ liệu collection, dữ liệu ở trong collection vẫn bất biến là 10. Đây chính là ý muốn nói của functional in nature.

Kể sơ thì 10 cái tên này gồm: R*** takizawa, S*** aoi …. Ẹc, đang nói về stream, lạc cmn đề 

0