Rate this post

Trong Java, Comparator là một giao diện (interface) của java.util package, cho phép so sánh hai đối tượng theo một tiêu chí nhất định. Comparator cung cấp một cách để so sánh hai đối tượng mà không phải sử dụng so sánh mặc định của đối tượng.

Các bài viết liên quan:

Phương thức chính của Comparator là int compare(T o1, T o2), nó trả về một giá trị nhỏ hơn 0 nếu o1 < o2, 0 nếu o1 = o2 và lớn hơn 0 nếu o1 > o2.

Ví dụ:

class Person {
    private String name;
    private int age;
    // constructor and other methods
}

class PersonAgeComparator implements Comparator<Person> {
    public int compare(Person p1, Person p2) {
        return p1.getAge() - p2.getAge();
    }
}

Comparator được sử dụng rộng rãi trong các hàm sắp xếp của Java như Collections.sort() hoặc Arrays.sort() để sắp xếp một danh sách các đối tượng theo một tiêu chí nhất định.

List<Person> people = new ArrayList<>();
people.add(new Person("John", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Mike", 35));

Collections.sort(people, new PersonAgeComparator());

Trong ví dụ trên, chúng ta đã tạo một lớp PersonAgeComparator implements Comparator<Person> để so sánh hai đối tượng Person theo tuổi của họ. Sau đó, chúng ta sắp xếp danh sách people sử dụng phương thức Collections.sort() với Comparator là PersonAgeComparator. Ngoài ra, Java 8 cung cấp một cách khác để tạo một Comparator bằng cách sử dụng lambda expression và method reference. Ví dụ:

people.sort(Comparator.comparingInt(Person::getAge));

Trong ví dụ trên, chúng ta đã sử dụng lambda expression để tạo một Comparator sắp xếp people theo tuổi. Nói chung, Comparator là một công cụ quan trọng trong việc sắp xếp các đối tượng theo tiêu chí nhất định, giúp cho chương trình của bạn dễ dàng quản lý và sắp xếp dữ liệu hơn.

Ví dụ về comparator trong java

Ví dụ 1: Sắp xếp một danh sách các sản phẩm theo tên

class Product {
    private String name;
    private double price;
    // constructor and other methods
}

class ProductNameComparator implements Comparator<Product> {
    public int compare(Product p1, Product p2) {
        return p1.getName().compareTo(p2.getName());
    }
}

List<Product> products = new ArrayList<>();
products.add(new Product("Laptop", 1000));
products.add(new Product("Tablet", 500));
products.add(new Product("Smartphone", 700));
Collections.sort(products, new ProductNameComparator());

Ví dụ 2: Sắp xếp một danh sách các sinh viên theo điểm trung bình

class Student {
    private String name;
    private double avgScore;
    // constructor and other methods
}

List <Student> students = new ArrayList<>();
students.add(new Student("John", 80));
students.add(new Student("Bob", 90));
students.add(new Student("Mike", 85));
students.sort(Comparator.comparingDouble(Student::getAvgScore));

Trong ví dụ trên, chúng ta sử dụng phương thức `comparingDouble` từ `Comparator` để tạo một Comparator sắp xếp danh sách students theo điểm trung bình.

Ví dụ 3: Sắp xếp một danh sách các nhân viên theo lương và tên

class Employee {
private String name;
private double salary;
// constructor and other methods
}

List<Employee> employees = new ArrayList<>();
employees.add(new Employee("John", 3000));
employees.add(new Employee("Bob", 2500));
employees.add(new Employee("Mike", 3500));
employees.sort(Comparator.comparing(Employee::getSalary).thenComparing(Employee::getName));

Trong ví dụ trên, chúng ta sử dụng phương thức `comparing` và `thenComparing` để tạo một Comparator sắp xếp danh sách employees theo lương và tên. Các ví dụ tr

Các ví dụ trên cho thấy rõ sự linh hoạt và dễ sử dụng của Comparator trong việc sắp xếp các đối tượng theo tiêu chí nhất định. Bạn có thể tạo một Comparator riêng để sắp xếp các đối tượng theo yêu cầu của bạn hoặc sử dụng các phương thức của Comparator để tạo một Comparator nhanh chóng và dễ dàng.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now