86.Sử dụng Comparator trong lập trình Java

Trong lập trình Java, Comparator là một giao diện (interface) trong gói java.util, được sử dụng để so sánh các đối tượng không có thứ tự tự nhiên hoặc không hỗ trợ việc so sánh sẵn. Khi bạn muốn sắp xếp một cấu trúc dữ liệu như List hoặc TreeSet theo một tiêu chí so sánh mà không phụ thuộc vào thứ tự tự nhiên của các đối tượng, bạn có thể sử dụng Comparator để cung cấp một quy tắc so sánh tùy chỉnh.

Giao diện Comparator có một phương thức chính là compare(), mà bạn cần triển khai để xác định cách so sánh hai đối tượng. Phương thức này trả về một số nguyên dương nếu đối tượng thứ nhất lớn hơn đối tượng thứ hai, trả về một số âm nếu đối tượng thứ nhất nhỏ hơn đối tượng thứ hai, và trả về 0 nếu hai đối tượng bằng nhau.

Dưới đây là một ví dụ về cách sử dụng Comparator để sắp xếp một List của các đối tượng Person dựa trên tuổi của họ:

java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class ComparatorExample {
    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 30));
        people.add(new Person("Charlie", 20));

        // Sử dụng Comparator để sắp xếp List theo tuổi
        Collections.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                return p1.getAge() - p2.getAge();
            }
        });

        // In kết quả
        for (Person person : people) {
            System.out.println(person.getName() + ": " + person.getAge());
        }
    }
}

Kết quả đầu ra sẽ là:

makefile
Charlie: 20
Alice: 25
Bob: 30

Trong ví dụ trên, chúng ta đã triển khai một đối tượng Comparator tùy chỉnh bằng cách sử dụng một lớp vô danh (anonymous class) và truyền nó vào phương thức sort() của lớp Collections. Điều này cho phép chúng ta sắp xếp List của các đối tượng Person theo tuổi của họ.

Lưu ý rằng Java 8 đã cung cấp các cách viết ngắn gọn hơn cho triển khai Comparator bằng sử dụng biểu thức lambda hoặc phương thức tham chiếu.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top