#java #sorting
#java #сортировка
Вопрос:
Мне требуется сортировать Student
объекты на основе их name
. Пожалуйста, обратите compareTo()
внимание, что в классе нет реализации Student
, только простые методы получения и установки, а сам класс является частью school.jar
, который я использую в своем проекте образовательного портала. Как мне получить доступ к этим полям, я могу ввести базовый класс для того же самого, но класса Student, помеченного как final
.
Является ли этот вариант использования технически осуществимым или нет? Если да, то как мне этого добиться?
Ответ №1:
Вам не нужно изменять Student
класс — вы можете ввести свой собственный Comparator
:
public class StudentNameComparator implements Comparator<Student> {
@Override
int compare(Student s1, Student s2) {
return s1.getName().compareTo(s2.getName());
}
}
А затем используйте его:
Collections.sort(listOfStudents, new StudentNameComparator());
Редактировать:
Обязательный комментарий: Java 8 (или более поздняя версия) допускала бы некоторый синтаксический сахар вокруг этого (например, Comparator.comparing(Student::getName)
), но требовалось использовать Java 7.
Ответ №2:
List<Student> list = new ArrayList<>();
Collections.sort(list, (a, b) -> a.getName().compareToIgnoreCase(b.getName()));
Комментарии:
1. Однако в Java 7 нет лямбд