Stream được giới thiệu trong Java 8, chỉ dùng để xử lý nhóm dữ liệu chứ không để lưu trữ phần tử. Nó không sửa đổi tập hợp thực tế, chúng chỉ cung cấp kết quả theo các phương thức được pipeline.
Stream API hỗ trợ nhiều phép toán và các phép toán được chia thành hai phần:
- Phép toán trung gian (Intermediate Operation) - Các phép toán này dùng để pipeline các phương thức khác và biến đổi thành stream khác. Chúng không tạo ra kết quả vì các phép toán này không được gọi cho đến khi phép toán cuối cùng được thực thi. Ví dụ: sorted(Comparator<T>), peek(Consumer<T>), distinct().
- Phép toán cuối cùng (Terminal operations) - Các phép toán này dùng để tạo ra kết quả. Chúng không thể dùng để chuỗi các phương thức khác. Ví dụ: forEach, count, toArray.
| Thứ tự | Khóa | Phép toán trung gian | Phép toán cuối cùng |
|---|---|---|---|
| 1 | Cơ bản | Dùng để pipeline phương thức khác và biến đổi thành stream khác | Phép toán cuối cùng trong Java là phương thức áp dụng cho stream như bước cuối. |
| 2 | Kiểu trả về | Chỉ trả về stream khác. | Trả về kết quả cuối cùng. |
| 3 | Phương thức | sorted(Comparator<T>) peek(Consumer<T>) distinct() |
forEach count toArray |
| 4 | Trường hợp sử dụng | Dùng để biến đổi stream thành stream khác | Dùng để tạo ra kết quả. |
Ví dụ về phép toán trung gian và cuối cùng
public class Main {
public static void main(String args[]) throws InterruptedException, ExecutionException {
List<String> laptopList = new ArrayList();
laptopList.add("DELL");
laptopList.add("ACER");
laptopList.add("HCL");
// Phép toán trung gian
laptopList.sort((p1, p2) -> p1.compareTo(p2));
// Phép toán cuối cùng
laptopList.forEach(a -> {
System.out.println(a);
});
}
}