Как отсортировать ArrayList с помощью компаратора? [дубликат]

этот вопрос уже есть ответ здесь:

У меня есть студент класса, который реализует статический метод

public static Comparator<Student> getCompByName()

, который возвращает новый объект comparator для Student, который сравнивает 2 объекта Students атрибутом "имя".

Теперь мне нужно проверить это, отсортировав ArrayList студентов по "имени", используя мою функцию getCompByName().

вот мой метод компаратора в моем студенческом классе.

public static Comparator<Student> getCompByName()
{   
 Comparator comp = new Comparator<Student>(){
     @Override
     public int compare(Student s1, Student s2)
     {
         return s1.name.compareTo(s2.name);
     }        
 };
 return comp;
}  

и главное, где мне нужно проверить

public static void main(String[] args)
{
    // TODO code application logic here

    //--------Student Class Test-------------------------------------------
    ArrayList<Student> students = new ArrayList();
    Student s1 = new Student("Mike");
    Student s2 = new Student("Hector");
    Student s3 = new Student("Reggie");
    Student s4 = new Student("zark");
    students.add(s1);
    students.add(s2);
    students.add(s3);
    students.add(S4);

    //Use getCompByName() from Student class to sort students

может ли кто-нибудь показать мне, как я буду использовать getCompByName() в моем основном для сортировки ArrayList по имени? Я новичок в компараторах и испытываю трудности с их использованием. Метод возвращает компаратор, поэтому я не уверен как это будет реализовано. Я знаю, что мне нужно использовать getCompByName() для сортировки, я просто не уверен, как его реализовать.

2 ответов


использовать коллекций.сортировка (список, компаратор) способ:

Collections.sort(students, Student.getCompByName());

также в вашем коде было бы хорошо использовать List интерфейс при объявлении List:

List<Student> students = new ArrayList();

вы также можете подтянуть код с помощью Student[] и передать его ArrayList конструктора:

public static void main(String[] args) {
    Student[] studentArr = new Student[]{new Student("Mike"),new Student("Hector"), new Student("Reggie"),new Student("zark")};
    List<Student> students = new ArrayList<Student>(Arrays.asList(studentArr));
    Collections.sort(students, Student.getCompByName());

    for(Student student:students){
        System.out.println(student.getName());
    }
}

здесь суть полного источника.


использовать Collections.sort():

Collections.sort(students, getCompByName());

Примечание: может быть полезно сделать ваш компаратор private static final переменной.

примечание 2: изменяет список на месте; не создает новый список.