CodeGym
Khuyến mãi
Học tập
Khóa học
Bài tập
Khảo sát & Bài kiểm tra
Trò chơi
Trợ giúp
Lịch
Cộng đồng
Người dùng
Diễn đàn
Trò chuyện
Bài viết
Câu chuyện thành công
Hoạt động
Đánh giá
Gói đăng ký
Chủ đề sáng

Bài học

  • Đánh giá
  • Về chúng tôi
Bắt đầu
Bắt đầu học
Bắt đầu học ngay
  • Tiến độ của tôi
  • Khóa học
  • Bản đồ Quest
  • Bài học
  • Các phương thức groupingBy và partitioningBy (Collectors)

    JAVA 25 SELF
    Cấp độ 31,Bài học 2
    Trong bài này, chúng ta học cách nhóm dữ liệu trong stream bằng các collector Collectors.groupingBy và Collectors.partitioningBy: nhóm đơn giản và lồng nhau, phân tách theo điều kiện boolean, cách lựa chọn giữa chúng, xử lý kết quả và một vài mẹo. Qua các ví dụ thực hành với chuỗi, số và đối tượng, bạn sẽ thấy cách lấy Map có cấu trúc mong muốn từ stream ( Stream API) và cách làm việc với hàm đặc trưng ( Function) và predicate ( Predicate). Cuối bài — phân tích các lỗi thường gặp.
    Có sẵn
  • Tổng hợp nâng cao: nhóm lồng nhau

    JAVA 25 SELF
    Cấp độ 31,Bài học 3
    Thực hành đào sâu vào nhóm lồng nhau với Stream và các collector: cách kết hợp Collectors.groupingBy với các bộ gộp ( maxBy, averagingInt, counting), biến đổi dữ liệu bằng mapping, chia thành các tập con qua partitioningBy và đọc đúng các cấu trúc Map lồng nhau. Nhiều ví dụ minh họa, trực quan hóa cấu trúc kết quả và phân tích các lỗi thường gặp.
    Có sẵn
  • Các collector nâng cao

    JAVA 25 SELF
    Cấp độ 31,Bài học 4
    Trong bài giảng này, chúng ta xem các kỹ thuật collector nâng cao của Stream API: các collector downstream lồng nhau cho groupingBy/ partitioningBy, chuyển đổi với mapping, lọc với filtering, “trải phẳng” với flatMapping, tổng hợp đồng thời với teeing (Java 12+), cũng như “đóng băng” collection qua toUnmodifiableList/Set/Map và collectingAndThen. Trình bày các pipeline thực tế và lỗi thường gặp.
    Có sẵn
  • Các phương thức flatMap và mapMulti

    JAVA 25 SELF
    Cấp độ 32,Bài học 0
    Trong bài giảng này, chúng ta sẽ phân tích sự khác nhau giữa phép biến đổi dữ liệu bằng map, phép biến đổi “làm phẳng” bằng flatMap và biến thể hiệu quả hơn từ Java 16+ — mapMulti. Qua các ví dụ thực hành, bạn sẽ thấy cách giải nén các bộ sưu tập lồng nhau thành Stream<String> thay vì Stream<Stream<String>>, cách làm việc với Optional thông qua stream(), cũng như khi nào nên chọn mapMulti vì hiệu năng mà không tạo các luồng trung gian.
    Có sẵn
  • Phương thức join, concat: hợp nhất stream

    JAVA 25 SELF
    Cấp độ 32,Bài học 1
    Trong bài giảng này, chúng ta phân tích các cách hợp nhất dữ liệu trong Stream API: phương thức tĩnh Stream.concat cho hai stream, kết hợp Stream.of + flatMap cho số lượng stream tùy ý, cũng như collector Collectors.joining để ghép các phần tử thành một chuỗi. Chúng ta sẽ nói về tính lazy, tính dùng-một-lần của stream, việc giữ nguyên thứ tự và các lỗi thường gặp (tái sử dụng stream, stream vô hạn, joining cho non-String) — kèm các ví dụ trực quan.
    Có sẵn
  • Các phép toán union, intersection, difference

    JAVA 25 SELF
    Cấp độ 32,Bài học 2
    Trong bài giảng này, chúng ta xem xét các phép toán điển hình trên tập hợp trong Java: hợp ( union), giao ( intersection) và hiệu ( difference) dựa trên interface Set và Stream API. Trình bày ví dụ thực tiễn với Stream.concat, Stream.of + flatMap, các phương án thay thế qua retainAll/ removeAll, cùng các lưu ý quan trọng về equals/ hashCode, hiệu năng và lỗi phổ biến.
    Có sẵn
  • Zip (zip), tạo luồng (iterate, generate)

    JAVA 25 SELF
    Cấp độ 32,Bài học 3
    Trong bài giảng này, chúng ta sẽ tìm hiểu zip là gì và vì sao nó không có trong Stream API tiêu chuẩn (trước Java 22), học cách “ghép cặp” các collection theo chỉ số bằng IntStream.range, cũng như tạo luồng “tức thời” bằng Stream.iterate và Stream.generate. Ví dụ, trực quan hóa và các lỗi thường gặp sẽ giúp bạn tự tin áp dụng việc sinh luồng và zip trong bài toán thực tế.
    Có sẵn
  • Phân tích các lỗi điển hình khi làm việc với Stream

    JAVA 25 SELF
    Cấp độ 32,Bài học 4
    Hướng dẫn chi tiết về các lỗi thường gặp khi làm việc với Stream API trong Java: bản chất dùng một lần của stream và việc gọi lặp lại các toán tử kết thúc ( collect(), forEach(), count()), thay đổi collection trong khi duyệt, quên limit() với các stream vô hạn ( iterate, generate), xử lý null và làm việc với Optional thông qua flatMap(Optional::stream), giữ nguyên thứ tự với forEachOrdered(), các phép toán tập hợp hiệu quả với Set, đóng tài nguyên đúng cách ( Files.lines + try-with-resources), thận trọng với parallelStream() và nguyên tắc “khi chưa có toán tử kết thúc — không có gì được thực thi”. Mọi vấn đề đều kèm ví dụ dễ hiểu và cách khắc phục.
    Có sẵn
  • Stream nguyên thủy và chi phí boxing

    JAVA 25 SELF
    Cấp độ 33,Bài học 0
    Trong bài giảng này, chúng ta sẽ tìm hiểu vì sao các stream thông thường của collection số ( Stream<Integer>, Stream<Double>) có thể kém hiệu quả do boxing/unboxing, và cách các stream nguyên thủy — IntStream, LongStream, DoubleStream — giúp tránh điều đó. Chúng ta sẽ xem các chuyển đổi mapToInt/ boxed(), các phép tổng hợp ( sum(), average(), summaryStatistics()), kết quả an toàn với OptionalInt/ OptionalDouble, cũng như nơi tối ưu hóa thực sự mang lại lợi ích và cách đo lường hiệu ứng bằng JMH.
    Có sẵn
  • Xử lý lười (lazy evaluation) trong Stream API

    JAVA 25 SELF
    Cấp độ 33,Bài học 1
    Trong bài giảng này, ta tìm hiểu cách xử lý lười trong Stream API hoạt động: sự khác nhau giữa các thao tác trung gian (intermediate) và thao tác kết thúc (terminal), vì sao việc tính toán chỉ bắt đầu sau khi gọi thao tác terminal, lợi ích của xử lý theo từng phần tử và “short-circuit”. Chúng tôi sẽ trình bày các chuỗi với filter, map, peek, findFirst, forEach, trực quan hóa đường đi của phần tử và phân tích các lỗi thường gặp cùng khuyến nghị về thứ tự thao tác hiệu quả.
    Có sẵn
  • Bộ sưu tập bất biến: Collections.unmodifiable

    JAVA 25 SELF
    Cấp độ 33,Bài học 2
    Trong bài giảng này, chúng ta phân tích cách bảo vệ dữ liệu bằng các lớp bọc bất biến Collections.unmodifiableList, unmodifiableSet, unmodifiableMap, sự khác nhau giữa tính bất biến “nông” và “sâu”, khi nào và vì sao nên trả về lớp bọc từ các phương thức, cũng như các lựa chọn thay thế hiện đại List.of/ Set.of/ Map.of. Chúng ta sẽ nói về các lỗi điển hình (ví dụ, kỳ vọng tính bất biến sâu hoặc làm việc với null) và lý do vì sao các nỗ lực sửa đổi sẽ dẫn tới UnsupportedOperationException.
    Có sẵn
  • Spliterator và stream song song

    JAVA 25 SELF
    Cấp độ 33,Bài học 3
    Trong bài giảng này, chúng ta tìm hiểu Spliterator là gì, cách nó cho phép không chỉ duyệt phần tử mà còn chia nguồn dữ liệu thành các phần bằng trySplit(), cách dựa trên đó các stream song song hoạt động thông qua parallelStream() và pool chung ForkJoinPool. Trình bày các phương thức then chốt ( tryAdvance, estimateSize, characteristics), các đặc tính điển hình ( ORDERED, SIZED, CONCURRENT, v.v.), ví dụ thực tế, sơ đồ Mermaid và các lỗi thường gặp khi sử dụng stream song song.
    Có sẵn
  • 1
  • ...
  • 14
  • 15
  • 16
  • 17
  • 18
  • ...
  • 30
Học
  • Đăng ký
  • Khóa học Java
  • Trợ giúp bài tập
  • Bảng giá
  • Cú pháp Java
Cộng đồng
  • Người dùng
  • Bài viết
  • Diễn đàn
  • Trò chuyện
  • Câu chuyện thành công
  • Hoạt động
  • Chương trình giới thiệu
Công ty
  • Về chúng tôi
  • Liên hệ
  • Đánh giá
  • Phòng báo chí
  • CodeGym cho EDU
  • Câu hỏi thường gặp
  • Hỗ trợ
CodeGymCodeGym là một khóa học trực tuyến để học lập trình Java từ đầu. Khóa học này là cách hoàn hảo để nắm vững Java cho người mới bắt đầu. Nó chứa 1200+ bài tập với kiểm tra ngay lập tức và phạm vi lý thuyết cơ bản cần thiết về Java. Để giúp bạn thành công trong học tập, chúng tôi đã triển khai một bộ tính năng tạo động lực: bài kiểm tra, dự án lập trình, nội dung về phương pháp học hiệu quả, và hỗ trợ sự nghiệp lập trình viên Java.
Theo dõi chúng tôi
Ngôn ngữ giao diện
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский
Vietnamese
"Lập trình viên được tạo nên, không sinh ra" © 2026 CodeGym
MastercardVisa
"Lập trình viên được tạo nên, không sinh ra" © 2026 CodeGym