Как отсортировать 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: изменяет список на месте; не создает новый список.