package comparable; import com.google.common.collect.ComparisonChain; import lombok.Data; import java.util.*; /** * @author xfyou * @date 2018/9/30 */ @Data public class Course implements Comparable<Course> { /** * 学号 */ private String studentNumber; /** * 姓名 */ private String studentName; /** * 分数 */ private int score; @Override public int compareTo(Course course) { return ComparisonChain.start() .compare(course.score, this.score) .compare(this.studentNumber, course.studentNumber) .result(); } public static void main(String[] args) { TreeSet<Course> coursesSet = new TreeSet<>(); Course course3 = new Course(); course3.setScore(95); course3.setStudentName("Smith"); course3.setStudentNumber("1003"); coursesSet.add(course3); Course course1 = new Course(); course1.setScore(90); course1.setStudentName("Frank"); course1.setStudentNumber("1110"); coursesSet.add(course1); Course course2 = new Course(); course2.setScore(90); course2.setStudentName("Tom"); course2.setStudentNumber("0002"); coursesSet.add(course2); // 编译时使用iterator实现 for (Course course : coursesSet) { System.out.println(course); } } }
按照分数由大到小,分数相同的情况下按照学号由小到大来排序。运行结果如下:
Course(studentNumber=1003, studentName=Smith, score=95) Course(studentNumber=0002, studentName=Tom, score=90) Course(studentNumber=1110, studentName=Frank, score=90)