Как реализовать пользовательскую сортировку по свойству внутри файла .class в Java 7

#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 нет лямбд