可以看到使用比较器前,先要写一个实体类,还要实现comparable接口,实现compareTo方法。这个方法一般会返回-1 0 1三个int类型数字,分别表示,对象和传入的对象比较,排序应该在传入的对象之后。因为比较器通常是为了集合排序而实现的。

ComparisonChain 的好处就在于,可以用method().method().这样的链式比较,而不用if else这种可读性很差的面向过程的方式去判断大小。比较链的用法是当第一个compare没有比出大小时,转向第二个属性进行比较,如果第二个也没有比较出大小,转向第三个属性进行比较。。以此类推,一般来说前几个属性足够比较了,不会比到最后一个属性。

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)

最新文章

  1. Delphi_01_控制台版HelloWorld
  2. 代码阅读分析工具Understand 2.0试用
  3. Android热身:通过网络获取资源并更新UI组件
  4. 对iOS中Delegate的理解
  5. WCF学习心得------(三)配置服务
  6. jQuery中each的break和continue
  7. Netty4.x中文教程系列(一) Hello World !
  8. 【HDOJ】1520 Anniversary party
  9. uva 1374 快速幂计算
  10. VirtualBox,Kernel driver not installed (rc=-1908)
  11. [CSS3] 学习笔记-CSS3盒子样式
  12. linux vi hjkl由来
  13. 腾讯织云:DevOps 流水线应用平台践行之路
  14. Here We Go(relians) Again
  15. 使用Redisson实现分布式锁,Spring AOP简化之
  16. POJ 3621-Sightseeing Cows-最优比率环|SPFA+二分
  17. 【XSY2714】大佬的难题 数学 树状数组
  18. Linux:TCP状态/半关闭/2MSL/端口复用
  19. Linux系统基本命令
  20. 万恶之源 - Python函数进阶

热门文章

  1. python 全栈开发,Day13(迭代器,生成器)
  2. SPFILEOPENBANKDB.ORA 手动编辑产生问题
  3. [HNOI2016]序列(未通过)
  4. 6-4 破碎的键盘 uva11988
  5. printf的执行顺序
  6. django csrf_protect及浏览器同源策略
  7. 在VS代码中编辑Python
  8. P3719 [AHOI2017初中组]rexp
  9. Jmeter脚本录制方法(二)手工编写脚本(jmeter与fiddler结合使用)
  10. 事物注解方式: @Transactional