Collections.sort, которые принимают несколько параметров - PullRequest
1 голос
/ 04 апреля 2020

Я новичок в Java. Я изучаю Java Коллекции, и у меня есть вопрос о написании программы для сортировки по атрибутам. Итак, у меня есть класс Course с этими переменными:

public class Course{
    private String courseName;
    private String courseDescription;
}

И еще один класс Student, который содержит класс Course, который представляет собой связанный список переменных курса:

public class Student{
    private String name;
    private LinkedList<Course> courses;
}

public Student(String name) {
        this.name = name;
        this.courses = new LinkedList<Course>();
}

Я хочу написать метод publi c void sortCourse () {} в классе Student, который должен принимать параметры, указывающие, должна ли сортировка быть восходящей или нисходящей, а также на основе какого атрибута курса сортировать курсы и печатать отсортированные список конечно. Как я могу написать этот метод?

Ответы [ 2 ]

5 голосов
/ 04 апреля 2020

Как сказал Fureei sh в комментарии : заставить его принять Comparator.

Например:

public void sortCourse(Comparator<Course> comparator) {
    this.courses.sort(comparator);
}

Затем вызывающий абонент напишет как то так:

// Sort ascending by name
student.sortCourse(Comparator.comparing(Course::getCourseName));

// Sort decending by name
student.sortCourse(Comparator.comparing(Course::getCourseName).reversed());

// Sort ascending by course level, then description
student.sortCourse(Comparator.comparing(Course::getCourseLevel)
                         .thenComparing(Course::getCourseDescription));
1 голос
/ 04 апреля 2020

Вы можете использовать Comparable интерфейс для сортировки курсов. Для этого вашему классу Course необходимо реализовать интерфейс Comparable.

public class Course implements Comparable <Course>{
    private String courseName;
    private String courseDescription;

    public Course(String courseName, String courseDescription){
        this.courseName = courseName;
        this.courseDescription = courseDescription;
    }

    public int compareTo(Course c) {
        return this.courseName.compareTo(c.courseName); 
    }

}

Теперь вы можете вызывать метод Collections.sort(student.courses) для сортировки списка курсов.

public class Student{
    private String name;
    private LinkedList<Course> courses;

    public Student(String name) {
        this.name = name;
        this.courses = new LinkedList<Course>();
    }

    public void sortCourse(String sortOrder){

        if(sortOrder.equals("asc")){
            Collections.sort(this.courses);
        } else {
            Collections.sort(this.courses);
            Collections.reverse(this.courses);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...