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
  • Hợp đồng equals và hashCode

    JAVA 25 SELF
    Cấp độ 29,Bài học 0
    Trong bài giảng này, chúng ta sẽ tìm hiểu cách xác định tính bằng nhau của các đối tượng trong Java cho đúng: sự khác nhau giữa so sánh tham chiếu bằng toán tử == và so sánh nội dung bằng phương thức equals, vì sao hợp đồng equals/ hashCode là tối quan trọng đối với các bộ sưu tập như HashSet và HashMap, và cách liên hệ điều đó với compareTo trong Comparable. Các ví dụ từng bước, best practices và phân tích những lỗi điển hình sẽ giúp bạn tránh bẫy khi làm việc với bảng băm và các bộ sưu tập có sắp xếp.
    Có sẵn
  • Lớp Objects: các phương thức equals, hashCode, hash

    JAVA 25 SELF
    Cấp độ 29,Bài học 1
    Trong bài giảng này, chúng ta tìm hiểu “dao đa năng” java.util.Objects: so sánh an toàn với Objects.equals, tính hash ngắn gọn bằng Objects.hash, ủy quyền so sánh qua Objects.compare, bảo đảm giá trị không- null bằng Objects.requireNonNull, cũng như dùng Objects.isNull/ Objects.nonNull trong Stream. Chúng tôi sẽ trình bày cách hiện thực đúng equals/ hashCode/ compareTo, phân tích các tình huống thực tế và lỗi thường gặp khi làm việc với HashMap/ HashSet.
    Có sẵn
  • Giao diện Comparable: triển khai, compareTo

    JAVA 25 SELF
    Cấp độ 29,Bài học 2
    Trong bài giảng này, chúng ta tìm hiểu về thứ tự tự nhiên của các đối tượng trong Java thông qua giao diện Comparable và phương thức compareTo: tại sao cần đến nó, cách triển khai đúng, cách hoạt động của việc sắp xếp các collection ( Collections.sort và List.sort), so sánh theo nhiều trường, xử lý giá trị null và tính nhất quán với equals/ hashCode. Chúng ta sẽ xem các thực hành tốt nhất, lỗi thường gặp và ví dụ thực tiễn với lớp Person.
    Có sẵn
  • Giao diện Comparator: tạo và sử dụng

    JAVA 25 SELF
    Cấp độ 29,Bài học 3
    Trong bài giảng này, chúng ta tìm hiểu khi nào nên dùng Comparator thay vì Comparable, cú pháp và hợp đồng (contract) của phương thức compare(T o1, T o2), thực hành sắp xếp danh sách bằng Collections.sort và List.sort, tạo comparator như các lớp riêng lẻ cũng như qua lớp ẩn danh và biểu thức lambda. Chúng ta sẽ xem xét sắp xếp nhiều cấp, xử lý giá trị null, tìm kiếm bằng Collections.binarySearch, đảo thứ tự với reversed(), cùng các best practices và lỗi thường gặp (ví dụ vì sao nên dùng Integer.compare thay vì a - b).
    Có sẵn
  • Tìm kiếm và sắp xếp phần tử trong các bộ sưu tập Java

    JAVA 25 SELF
    Cấp độ 29,Bài học 4
    Trong bài giảng này, chúng ta sẽ tìm hiểu các kỹ thuật thực hành khi làm việc với bộ sưu tập: tìm kiếm phần tử bằng các phương thức contains, indexOf, lastIndexOf; tìm theo điều kiện bằng vòng lặp for và toán tử break; tìm giá trị nhỏ nhất và lớn nhất với lớp Collections. Chúng ta sẽ luyện tập sắp xếp danh sách bằng Collections.sort và List.sort, sử dụng Comparator, sắp xếp các cặp từ Map, cũng như sắp xếp đối tượng theo trường. Cuối cùng, chúng ta sẽ thảo luận các lỗi thường gặp: danh sách bất biến từ List.of, cố gắng sắp xếp Set/ Map và comparator không đúng.
    Có sẵn
  • Giới thiệu về Stream API: vì sao cần các stream

    JAVA 25 SELF
    Cấp độ 30,Bài học 0
    Trong bài này, chúng ta phân tích vì sao cách tiếp cận mệnh lệnh khi xử lý collection nhanh chóng sinh ra nhiều boilerplate, và cách Stream API đưa mã về phong cách khai báo: chuỗi thao tác filter, map, collect, kết hợp đơn giản, ít lỗi hơn và dễ song song hóa qua parallelStream(). Chúng ta sẽ chỉ ra phạm vi ứng dụng, lịch sử ra đời và các lỗi thường gặp cần tránh.
    Có sẵn
  • Các thao tác cơ bản của Stream API: map, filter, collect

    JAVA 25 SELF
    Cấp độ 30,Bài học 1
    Hướng dẫn từng bước về các thao tác cơ bản của Stream API: cách lấy stream từ collection và mảng ( stream(), Arrays.stream, Stream.of), sự khác nhau giữa các thao tác trung gian ( filter, map, distinct) và các thao tác kết thúc ( collect, forEach, count), và cách gom kết quả bằng Collectors ( toList, toSet, joining). Các ví dụ thực hành, bài tập nhỏ và mục lỗi thường gặp sẽ giúp bạn nhanh chóng nắm vững xử lý dữ liệu theo pipeline.
    Có sẵn
  • Các phép lấy tập con trong Stream API: distinct, limit, skip

    JAVA 25 SELF
    Cấp độ 30,Bài học 2
    Trong bài này, chúng ta phân tích ba thao tác then chốt của Stream API để làm việc với các tập con dữ liệu: distinct (loại bỏ trùng lặp), limit (giới hạn số phần tử) và skip (bỏ qua các phần tử đầu). Bạn sẽ thấy cách chúng hoạt động trên các bộ sưu tập chuỗi và đối tượng, việc triển khai equals/ hashCode ảnh hưởng thế nào tới kết quả của distinct, cách kết hợp các thao tác để phân trang và chọn top‑N, cùng những lỗi thường gặp nhất.
    Có sẵn
  • Phương thức forEach, peek: tác dụng phụ

    JAVA 25 SELF
    Cấp độ 30,Bài học 3
    Trong bài giảng này, chúng ta xem xét các thao tác Stream dành cho tác dụng phụ: thao tác kết thúc forEach và thao tác trung gian peek. Hiểu khi nào và tại sao nên dùng chúng, chúng khác nhau thế nào, vì sao sau forEach luồng “đóng”, còn peek không thay đổi dữ liệu và chỉ chạy khi có thao tác kết thúc. Chúng ta sẽ đưa ra ví dụ thực tế, phân tích các điểm không hiển nhiên và lỗi thường gặp (bao gồm ConcurrentModificationException và việc thay thế collect bằng forEach một cách sai lầm).
    Có sẵn
  • Chuyển đổi bộ sưu tập bằng Stream

    JAVA 25 SELF
    Cấp độ 30,Bài học 4
    Hướng dẫn thực hành về chuyển đổi bộ sưu tập bằng Stream API: chuyển đổi List ↔ Set, dựng ánh xạ thông qua Collectors.toMap() (bao gồm xử lý trùng lặp), ghép thành chuỗi với Collectors.joining(), phân tích các phép toán kết thúc và trung gian ( forEach, collect, count, anyMatch và khác). Bên trong — ví dụ dễ hiểu, giải thích và lỗi thường gặp.
    Có sẵn
  • Các phương thức sum, count, average, max, min trong Stream API

    JAVA 25 SELF
    Cấp độ 31,Bài học 0
    Trong bài giảng này, chúng ta tìm hiểu các phép toán tổng hợp của Stream API: cách đếm số lượng bằng count(), tính tổng và trung bình với các stream kiểu nguyên thủy ( IntStream, LongStream, DoubleStream) và các phương thức sum(), average(), cũng như tìm giá trị cực trị bằng min()/ max(). Chúng ta cũng sẽ bàn về cách làm việc với các container Optional, OptionalInt, OptionalLong, OptionalDouble và các cách trích xuất giá trị an toàn: orElse(...), ifPresent(...), orElseThrow(). Học cách sử dụng các collector Collectors.summingInt, Collectors.averagingInt, Collectors.maxBy/ minBy và kết hợp chúng với groupingBy. Cuối cùng — phân tích các lỗi thường gặp và những điểm cần lưu ý.
    Có sẵn
  • Phương thức reduce và collect: tổng hợp dữ liệu

    JAVA 25 SELF
    Cấp độ 31,Bài học 1
    Tìm hiểu các thao tác kết thúc (terminal) của luồng: phép thu gọn đa dụng reduce() và bộ thu thập mạnh mẽ collect(). Ta sẽ hiểu các chữ ký với identity, accumulator và combiner, học cách gom dữ liệu bằng các collector dựng sẵn từ Collectors ( toList(), toMap(), joining(), groupingBy()) và xem khi nào nên ưu tiên collect() thay vì reduce(). Cũng sẽ bàn về Optional, xử lý trùng lặp trong toMap() và các sắc thái của luồng song song.
    Có sẵn
  • 1
  • ...
  • 13
  • 14
  • 15
  • 16
  • 17
  • ...
  • 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