Trong bài viết này, chúng ta sẽ tìm hiểu về một trong những chức năng được bổ sung từ phiên bản Java 8 - Stream. Tuy nhiên, trước khi tìm hiểu về Stream, bạn cần phải có kiến thức về biểu thức lambda, tham chiếu phương thức, giao diện chức năng
Truyền phát API
Một trong những tính năng mới trong Java 8 chính là Stream - Trợ giúp cho công việc thao tác trên bộ sưu tập và mảng trở nên dễ dàng và tối ưu hóa hơn
Create Stream
Luồng có thể tạo từ bộ sưu tập hoặc mảng bằng cách sử dụng các phương thức
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
2 hoặc String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
3Ví dụ
Tạo luồng từ mảng bằng cách sử dụng
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
4 hoặc String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
5String[] arr= {"a", "b","c"};
Stream stream = Arrays.stream[arr];
hoặc
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
Tạo luồng từ bộ sưu tập
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
Đa luồng với Stream
Stream API cũng đơn giản hóa đa luồng bằng cách sử dụng phương thức
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
6________số 8
Thực hiện hành động với Stream
Có nhiều thuật toán hữu ích có thể được sử dụng với Stream. Chúng được chia thành các hoạt động trung gian [trả về Stream] và hoạt động đầu cuối [trả về kết quả của kiểu xác định]
Lưu ý. Các hoạt động mà chúng ta thực hiện trên Bộ sưu tập, mảng hay bất kỳ nguồn dữ liệu nào khác sẽ không làm thay đổi dữ liệu ban đầu, chúng chỉ trả về luồng mới
Ví dụ
long count = list.stream[].distinct[].count[];
Phương thức
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
7 sẽ tạo ra một luồng mới với các phần tử là duy nhất [duy nhất] của luồng trước đó. Phương thức String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
8 sẽ trả về kích thước của luồngThay thế cho vòng lặp
Stream API giúp thay thế các vòng lặp
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
9, List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
0 và List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
1. Xem ví dụ dưới đâyString[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
5Đoạn mã trên có thể được thay đổi khi sử dụng Stream API as after
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
6Filter data with List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
2
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
Với phương thức
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
2 giúp loại bỏ các phần tử dựa trên tiêu chí định trướcString[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
9Với ví dụ trên, mình đang thực hiện tìm các phần tử chưa có “J”
Ánh xạ với List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
4
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
Stream cung cấp phương thức
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
4 giúp ánh xạ phần tử tới các kết quả tương ứngString[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
2List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
6, List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
7 và List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
8
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
Stream API cung cấp các phương thức
List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
6, List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
7 và List list = Arrays.asList["a","b","c"];
Stream stream = list.stream[];
8 sẽ trả về giá trị của kiểu list.parallelStream[].forEach[element -> element.doSomeThing[]];
2. Ngay cái tên của 3 phương thức này đã cho chúng ta thấy chức năng của nóString[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
0list.parallelStream[].forEach[element -> element.doSomeThing[]];
3
list.parallelStream[].forEach[element -> element.doSomeThing[]];
Phương thức
list.parallelStream[].forEach[element -> element.doSomeThing[]];
3 kết hợp các phần tử của luồng thành một cách sử dụng một BinaryOperatorVí dụ
String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
0Với ví dụ trên mình muốn tính tổng tất cả các phần tử với 1 số nguyên ban đầu [số 23]. Vì vậy đoạn mã trên sẽ trả về kết quả là 26
Thu thập kết quả Luồng sang một Bộ sưu tập với list.parallelStream[].forEach[element -> element.doSomeThing[]];
5
list.parallelStream[].forEach[element -> element.doSomeThing[]];
list.parallelStream[].forEach[element -> element.doSomeThing[]];
5 rất tiện dụng trong trường hợp cần chuyển đổi Luồng thành Bộ sưu tập và biểu diễn luồng dưới dạng list.parallelStream[].forEach[element -> element.doSomeThing[]];
7String[] arr= {"a", "b","c"};
Stream stream = Stream.of[arr];
1Mục tiêu của bài viết này chỉ là giới thiệu nhanh về Stream. Ngoài các phương thức trên Stream còn cung cấp rất nhiều phương thức khác như
list.parallelStream[].forEach[element -> element.doSomeThing[]];
8, list.parallelStream[].forEach[element -> element.doSomeThing[]];
9, long count = list.stream[].distinct[].count[];
0, long count = list.stream[].distinct[].count[];
1,… mà chúng ta sẽ tìm hiểu trong các bài viết sauTham khảo ngay khóa học Java căn bản hoặc Lộ trình Java Fullstack đầy đủ từ căn bản đến nâng cao. Liên hệ ngay bạn Mẫn 0963023185 [zalo] để được hỗ trợ