Nội dung
Danh sách bài học
- 01~5 phút
Tổng quan module — Stream API & Lambda
Bản đồ học tập module Stream API & Lambda: lambda, functional interface, stream pipeline, collectors, optional, parallel. Biết trước để học đúng thứ tự.
- 02~15 phút
Lambda và functional interface — hàm trở thành giá trị
Lambda expression, functional interface (SAM), 4 interface chuẩn trong java.util.function, và quy tắc effectively final khi capture biến. Vì sao Java 8 cần lambda và compiler suy kiểu lambda qua target type thế nào.
- 03~14 phút
Method reference và invokedynamic — lambda bên dưới bytecode
4 dạng method reference với ::, khi nào nên dùng thay lambda, và cơ chế invokedynamic + LambdaMetafactory — vì sao lambda không phải anonymous inner class, capturing vs non-capturing lambda khác gì về allocation.
- 04~13 phút
Stream basics — pipeline lazy và terminal operation
Stream là pipeline lazy: intermediate op chỉ ghi ý định, terminal op mới kích hoạt. Element đi từng cái qua pipeline; stream vô hạn và short-circuit nhờ cơ chế này.
- 05~15 phút
map / filter / reduce — ba operation cốt lõi
Ba operation nền tảng của functional programming: filter (lọc), map (biến đổi), reduce (gộp) — kèm ràng buộc associativity quyết định parallel đúng hay sai. Viết 80% task aggregate mà không cần loop.
- 06~14 phút
Stream nâng cao — flatMap, takeWhile và peek
flatMap cho stream lồng (và lựa chọn mapMulti từ Java 16), takeWhile/dropWhile (Java 9+), peek debug, cùng các op stateful sorted/distinct/limit/skip — bộ công cụ cho 20% task còn lại sau map/filter/reduce.
- 07~15 phút
Optional — xử lý null không vỡ
Optional<T> — container có hoặc không có value. API map/filter/flatMap/orElse/orElseThrow. Khi nào dùng và khi nào KHÔNG — vì Optional không phải replacement cho null ở mọi chỗ.
- 08~22 phút
Collectors Deep — toMap, groupingBy, partitioningBy và custom Collector
Đi sâu vào Collectors utility: toMap với merge function, groupingBy lồng nhiều cấp, downstream collectors, partitioningBy, joining, và tự xây Collector.of cho use-case đặc thù.
- 09~20 phút
Parallel Stream — khi nào thực sự nhanh hơn, khi nào nguy hiểm
ForkJoinPool bên dưới parallelStream, 4 pitfall stateful/ordering/blocking/race condition, formula Doug Lea NxQ, và khi nào nên dùng CompletableFuture thay thế.
- 10~15 phút
Immutability và Functional Style — thiết kế Java không có surprise
Pure function, referential transparency, cách Java implement immutability qua final/record/List.of, pitfall final reference vs immutable content, và tổng kết module Stream & Lambda.
- 11~30 phút
Mini-challenge: Sales report với stream pipeline
Bài thực hành khép lại Module — phân tích 10k bản ghi sales bằng stream chain: lọc, group, aggregate, top-N, output báo cáo.
- 12~10 phút
Tổng kết module — Stream API & Lambda
Recap toàn module: cheat-sheet, glossary, pitfall checklist, và self-assessment 1-1 với 5 learning outcomes. Dùng để ôn trước khi chuyển module tiếp theo.