Java中的比较器Comparator
排序规则
升序:o1 - o2 ; 降序:o2 - o1;
三种实现方法
1.最常用:直接new一个Comparator
//降序优先队列 PriorityQueue<Integer> q = new PriorityQueue<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; } });
2.新建一个比较器Comparator
PriorityQueue pq = new PriorityQueue(new UpComparator());
//升序比较器 class UpComparator implements Comparator<Integer>{ @Override public int compare(Integer o1, Integer o2) { return o1-o2; } }
3.直接类继承Comparable < Object>,重写CompareTo()
/** * 商品po类 */ public class Items implements java.lang.Comparable<Items> { private String title; private int hits; private Date pubTime; public Items() { } public Items(String title, int hits, Date pubTime) { super(); this.title = title; this.hits = hits; this.pubTime = pubTime; } //时间降序 点击量升序 标题降序 @Override public int compareTo(Items o) { int result = 0; //按照生产时间降序 result = - this.pubTime.compareTo(o.pubTime); if(0==result){ //如果生产时间相同 就按照销售量升序排列 result = this.hits-o.hits; if(0==result){ //如果销售量相同 按照名字降序排列 result = - this.title.compareTo(o.title); } } return result; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("商品名称").append(this.title); sb.append("销售量").append(this.hits); sb.append("生产时间").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime)).append(" "); return sb.toString(); } }