Java Stream API: các thao tác thường dùng qua ví dụ
22/07/2026
Stream API (Java 8+) cho phép xử lý collection theo phong cách khai báo (declarative): mô tả muốn gì thay vì làm từng bước ra sao. Code ngắn và dễ đọc hơn vòng lặp thủ công.
Thao tác trung gian phổ biến
filter(predicate): giữ lại phần tử thoả điều kiệnmap(fn): biến đổi mỗi phần tửsorted(): sắp xếpdistinct(): loại trùnglimit(n)/skip(n): cắt/bỏ đầu
Thao tác kết thúc (terminal)
List<String> names = users.stream()
.filter(u -> u.getAge() >= 18)
.map(User::getName)
.sorted()
.collect(Collectors.toList());
Map<String, List<User>> byCity = users.stream()
.collect(Collectors.groupingBy(User::getCity));
Bẫy cần tránh
- Stream chỉ dùng một lần — dùng lại ném
IllegalStateException - Đừng gây side-effect trong
map/filter(sửa biến ngoài) — khó đoán với stream song song parallelStream()không phải lúc nào cũng nhanh hơn — chỉ lợi với tập lớn và thao tác nặng, còn lại chi phí điều phối thread lấn át
Với vòng lặp đơn giản có side-effect, for-each truyền thống đôi khi rõ ràng hơn. Dùng stream cho pipeline biến đổi/gom dữ liệu.
👉 Dùng thử công cụ liên quan trên dev-hub: JSON Formatter — chạy hoàn toàn trong trình duyệt, không gửi dữ liệu lên server.