如何通过其子对象的属性对列表进行排序?

时间:2018-10-10 05:05:32

标签: java

springboot项目中有以下对象。

res.write()

我有一个要按Student { private String studentId; private Date courseStartedDate; private List<Course> course; public Date getCourseStartedDate() { return courseStartedDate; } public void setCourseStartedDate(Date courseStartedDate) { this.courseStartedDate = courseStartedDate; } public List<Course> getCourse() { return course; } public void setCourse(List<Course> course) { this.course = course; } } Course{ private String courseId; private CourseStatus courseStatus; public CourseStatus getCourseStatus() { return courseStatus; } public void setCourseStatus(CourseStatus courseStatus) { this.courseStatus = courseStatus; } } public Enum CourseStatus{ BEGINNER("beginner"); INTERMEDIATE("intermediate"); ADVANCED("advanced"); private String CourseStatus; CourseStatus(String courseStatus) { this.courseStatus = courseStatus; } public String getCourseStatus() { return courseStatus; } } courseStartedDate降序排列的学生列表。

我无法修改模型。

我可以按CourseStatus对列表进行排序,如下所示:   courseStartedDate

我不确定如何修改上面的代码行以基于studentList.sort(Comparator.comparing(Student::getCourseStartedDate).reversed());对列表进行排序?

我该如何实现?

1 个答案:

答案 0 :(得分:1)

来自comment的澄清:

  

他的课程列表中的第一门课程可以视为他的主要课程。

由于CourseStatusenum(不是Enum),因此它自动是Comparable,因此要按状态添加次要排序顺序,请致电{{3} }:

// ORDER BY courseStartedDate DESC, course[0].courseStatus DESC
studentList.sort(Comparator.comparing(Student::getCourseStartedDate)
                           .thenComparing(s -> s.getCourse().get(0).getCourseStatus())
                           .reversed());

或者,如果要按升序对状态进行排序:

// ORDER BY courseStartedDate DESC, course[0].courseStatus ASC
studentList.sort(Comparator.comparing(Student::getCourseStartedDate)
                           .reversed()
                           .thenComparing(s -> s.getCourse().get(0).getCourseStatus()));