Как отсортировать ArrayList с помощью Comparator?
У меня есть ученик класса, который реализует статический метод
public static Comparator<Student> getCompByName()
который возвращает новый объект-компаратор для Student, который сравнивает 2 объекта-ученика
по атрибуту 'name'.
Мне нужно проверить это путем сортировки студентов ArrayList по имени, используя мою функцию getCompByName().
Вот мой метод Comparator в моем классе Student.
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;
}
И Main, где мне нужно протестировать
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() для сортировки, я просто не уверен, как его реализовать.
Ответы
Ответ 1
Используйте метод Collections.sort(List, Comparator):
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());
}
}
Вот Gist полного источника.
Ответ 2
Используйте Collections.sort()
:
Collections.sort(students, getCompByName());
Примечание: может быть полезно сделать ваш компаратор переменной private static final
.
Примечание 2: изменяет список на месте; не создает новый список.