Java OO & Functional/Tổng quan module — Stream API & Lambda
27/38
Bài 27 / 38~5 phútStream API & LambdaMiễn phí lượt xem

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

TL;DR: Module này dạy cách viết Java theo functional style — từ lambda cơ bản, method reference, stream pipeline lazy, collectors nâng cao, Optional, đến parallel stream. Đây là nền tảng để đọc hiểu code enterprise modern và framework như Spring WebFlux, Project Reactor.

Sau module này bạn sẽ làm được gì

flowchart TD
    A["Lambda &<br/>Functional Interface"]
    B["Method Reference &<br/>invokedynamic"]
    C["Stream Basics<br/>(lazy pipeline)"]
    D["map / filter / reduce"]
    E["Stream nâng cao"]
    F["Optional"]
    G["Collectors Deep"]
    H["Parallel Stream"]
    I["Immutability &<br/>Functional Style"]
    J["Mini-challenge<br/>Sales Report"]

    A --> C
    B --> C
    C --> D
    D --> E
    D --> G
    C --> H
    E --> I
    G --> J
    H --> J

Khi hoàn thành module, bạn đạt được 5 outcomes sau (self-assessment cuối module match 1-1):

  1. Explain cơ chế lazy evaluation và phân biệt intermediate vs terminal operation trong Stream API
  2. Implement stream pipeline với filter/map/reduce/collect trên collection và infinite source
  3. Choose đúng functional interface và method reference cho từng stream operation
  4. Diagnose pitfall stream phổ biến: missing terminal op, stream reuse IllegalStateException, stateful op trên infinite stream
  5. Compare imperative loop vs functional stream về readability, memory, và short-circuit behaviour

Lộ trình các bài

BàiChủ đềMục tiêu
01Lambda & Functional InterfaceExplain @FunctionalInterface, SAM, 4 built-in interface cốt lõi
02Method Reference & invokedynamicExplain 4 loại method reference, cơ chế invokedynamic bytecode
03Stream basics — pipeline lazyExplain lazy evaluation, intermediate vs terminal, element-by-element
04map / filter / reduceImplement 3 op cốt lõi, predict output, chọn đúng variant
05Stream nâng caoImplement flatMap, distinct, sorted, takeWhile/dropWhile
06OptionalDiagnose NPE pattern, implement Optional chain thay null check
07Collectors deepImplement groupingBy, partitioningBy, joining, custom Collector
08Parallel StreamCompare sequential vs parallel, diagnose race condition, chọn đúng khi nào dùng
09Immutability & Functional StyleExplain immutable value object, pure function, compose pipeline
10Mini-challenge Sales ReportImplement báo cáo sales cuối module — tổng hợp toàn bộ
11Tổng kết moduleRecap + self-assessment 1-1 với 5 outcomes

Prerequisite

Bạn cần hoàn thành module trước (hoặc tự học tương đương) trước khi vào module này:

  • Java Foundations — syntax cơ bản, generics, collections (List, Map, Set), exception handling. Module này dùng List.of, ArrayList, generic type parameter mà không giải thích lại.

Không cần biết Spring, Reactor, hay bất kỳ framework nào. Toàn module dùng Java thuần (Java 17+).

Ước lượng thời gian

  • Lộ trình tối thiểu (concept + mini-challenge): ~3–4 giờ đọc tập trung
  • Lộ trình đầy đủ (đọc kỹ + tự làm self-check + mini-challenge): ~6–8 giờ
  • Mỗi bài concept: 10–15 phút đọc + 5–10 phút self-check

Gợi ý học

  • Đọc bài 01 và 02 trước khi vào bài 03 — lambda là tham số cho mọi stream op.
  • Bài 03 là trung tâm module — nếu chưa hiểu lazy evaluation, các bài sau sẽ khó.
  • Sau mỗi bài, làm hết self-check trước khi đọc tiếp — retrieval practice hiệu quả hơn đọc lại.
  • Bài 10 (mini-challenge) là bài tổng hợp — làm thật, không đọc lời giải trước khi thử.

Bắt đầu tại đây: Lambda & Functional Interface

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên