Stream API & Lambda
Lambda, functional interface, Stream API (map/filter/reduce), Collectors, Optional. Xử lý dữ liệu theo functional style — cốt lõi của Java modern, nền tảng để đọc code enterprise và framework như Spring WebFlux.
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~12 phút
Lambda và Functional Interface trong Java
Lambda expression, Single Abstract Method (SAM), 4 functional interface cốt lõi và nguyên tắc effectively final trong quản lý ấn phẩm thư viện.
- 03~12 phút
Method Reference và invokedynamic: Cơ Chế Bytecode Bên Dưới Lambda
Phân biệt 4 dạng method reference, cơ chế invokedynamic của JSR 292, LambdaMetafactory và khác biệt bộ nhớ giữa capturing và non-capturing lambda.
- 04~12 phút
Stream Basics: Pipeline Lazy và Terminal Operation
Cơ chế lazy evaluation của Stream API, mô hình Sink chaining, element-by-element traversal và an toàn xử lý stream vô hạn với short-circuit.
- 05~12 phút
Map, Filter và Reduce: Ba Thao Tác Cốt Lõi Của Stream API
Làm chủ bộ ba map, filter, reduce trong Java Stream, tối ưu primitive stream và bảo đảm tính chất kết hợp (associativity) khi chạy song song.
- 06~12 phút
Stream Nâng Cao: flatMap, takeWhile, dropWhile và Stateful Operations
Phẳng hóa cấu trúc lồng nhau với flatMap, mapMulti, cắt chuỗi dữ liệu với takeWhile/dropWhile và kiểm soát thao tác stateful trong Java Stream.
- 07~12 phút
Optional: Xử Lý Thiếu Dữ Liệu An Toàn Thay Thế Con Trỏ Null
Làm chủ Optional trong Java, phân biệt orElse vs orElseGet, chuỗi biến đổi map/flatMap an toàn và các nguyên tắc thiết kế API chống lạm dụng.
- 08~12 phút
Collectors Deep Dive: toMap, groupingBy và Custom Collector
Làm chủ Collectors trong Java: xử lý trùng khóa toMap, phân nhóm đa tầng groupingBy, partitioningBy và thiết kế Custom Collector qua Collector.of.
- 09~12 phút
Parallel Stream: Khi Nào Nên Dùng và Cạm Bẫy Luồng Phổ Biến
Cơ chế ForkJoinPool, công thức Doug Lea NxQ > 10000, cạm bẫy starvation khi nghẽn I/O và nguyên tắc chọn giữa parallelStream với CompletableFuture.
- 10~12 phút
Immutability và Functional Style: Thiết Kế Code Java Không Có Bất Ngờ
Thiết kế hệ thống bất biến (Immutability), Pure Functions, Record trong Java 16+, kỹ thuật Copy-then-Validate và cạm bẫy final reference.
- 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.