Bài 301: Comparator trong java

Ngày đăng: 1/7/2023 9:34:01 AM

Giao diện Comparator trong java được sử dụng để sắp xếp các đối tượng của lớp do người dùng định nghĩa (user-defined). Giao diện này thuộc về gói java.util và chứa hai phương thức có tên compare(Object obj1,Object obj2) và equals(Object element).


Chúng ta có thể sắp xếp các phần tử của:

  1. Các đối tượng String.
  2. Các đối tượng của lớp Wrapper.
  3. Các đối tượng của lớp do người dùng định nghĩa (User-defined).

Phương thức compare()

public int compare(Object obj1,Object obj2): so sánh đối tượng đầu tiên với đối tượng thứ hai.


Lớp Collections trong java

Lớp Collections trong java cung cấp các phương thức static để sắp xếp các phần tử của collection. Nếu các phần tử collection thuộc kiểu Set hoặc Map, chúng ta có thể sử dụng TreeSet hoặc TreeMap. Nhưng chúng ta không thể sắp xếp các phần tử của List.


Phương thức của lớp Collections để sắp xếp các phần tử của List

public void sort(List list, Comparator c): được sử dụng để sắp xếp các phần tử của List theo cài đặt đối tượng Comparator.

Sorting trong Collections


Ví dụ về Comparator trong java

Tạo đối tượng nặc danh java.util.Comparator để cài đặt phương thức compare(). Bạn cần phải cài đặt tiêu chí để so sánh trong phương thức compare() để so sánh các đối tượng Student với nhau, dưới đây là ví dụ sắp xếp các đối tượng Student tăng dần theo name:

Tạo lớp Student.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32     

package vn.viettuts.collection;

 

/**

 * Student class

 *

 * @author viettuts.vn

 */

class Student {

    private int id;

    private String name;

    private int age;

    private String address;

 

    public Student() {

    }

 

    public Student(int id, String name, int age, String address) {

        super();

        this.id = id;

        this.name = name;

        this.age = age;

        this.address = address;

    }

 

    // getter & setter

     

    @Override

    public String toString() {

        return "Student@id=" + id + ",name=" + name

                + ",age=" + age + ",address=" + address;

    }

}

Tạo lớp ComparatorExample.java

Trong ví dụ này chúng ta tạo ra 2 đối tượng nặc danh của lớp Comparator như 2 tiêu chí sắp xếp các đối tượng của lớp Student theo name và age.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50     

package vn.viettuts.collection;

 

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

 

 

/**

 * ComparatorExample class

 *

 * @author viettuts.vn

 */

public class ComparatorExample {

    public static void main(String[] args) {

        // create list students

        List<Student> listStudents = new ArrayList<Student>();

        // add students to list

        listStudents.add(new Student(1, "Vinh", 19, "Hanoi"));

        listStudents.add(new Student(2, "Hoa", 24, "Hanoi"));

        listStudents.add(new Student(3, "Phu", 20, "Hanoi"));

        listStudents.add(new Student(4, "Quy", 22, "Hanoi"));

         

        // sort list student by it's name ASC

        System.out.println("sort list student by it's name ASC: ");

        Collections.sort(listStudents, new Comparator<Student>() {

            @Override

            public int compare(Student o1, Student o2) {

                return o1.getName().compareTo(o2.getName());

            }

        });

        // show list students

        for (Student student : listStudents) {

            System.out.println(student.toString());

        }

         

        // sort list student by it's age ASC

        System.out.println("sort list student by it's age ASC: ");

        Collections.sort(listStudents, new Comparator<Student>() {

            @Override

            public int compare(Student o1, Student o2) {

                return o1.getAge() > o2.getAge() ? 1 : -1;

            }

        });

        // show list students

        for (Student student : listStudents) {

            System.out.println(student.toString());

        }

    }

}

Kết quả:

 sort list student by it's name ASC: 
 Student@id=2,name=Hoa,age=24,address=Hanoi
 Student@id=3,name=Phu,age=20,address=Hanoi
 Student@id=4,name=Quy,age=22,address=Hanoi
 Student@id=1,name=Vinh,age=19,address=Hanoi
 sort list student by it's age ASC: 
 Student@id=1,name=Vinh,age=19,address=Hanoi
 Student@id=3,name=Phu,age=20,address=Hanoi
 Student@id=4,name=Quy,age=22,address=Hanoi
 Student@id=2,name=Hoa,age=24,address=Hanoii

Nguồn tin: viettuts.vn