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.

12 bài · ~188 phútMiễn phí

Nội dung

Danh sách bài học

  1. 01

    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ự.

    ~5 phút
  2. 02

    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.

    ~15 phút
  3. 03

    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.

    ~14 phút
  4. 04

    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.

    ~13 phút
  5. 05

    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.

    ~15 phút
  6. 06

    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.

    ~14 phút
  7. 07

    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ỗ.

    ~15 phút
  8. 08

    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ù.

    ~22 phút
  9. 09

    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ế.

    ~20 phút
  10. 10

    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.

    ~15 phút
  11. 11

    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.

    ~30 phút
  12. 12

    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.

    ~10 phút