自定义引用类型放入集合中,按实际业务需求进行排序的两种思路
第一种思路:
(1)自定义实体类实现java.lang.Comparable接口,重写public int compareTo(Object obj)方法。自定义业务比较规则
(2)利用java.util.Collections类的静态方法sort(List<自定义类型> list)进行排序(默认升序)或者。自己编写排序工具类。冒泡+compareTo(obj)方法
例子:新闻条目的排序
需要排序的实体类,实现Comparable接口,重写方法,自定义排序规则
1 package com.zdxy.shangxiaofei; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Collections; 5 import java.util.Date; 6 7 import javax.tools.JavaCompiler; 8 9 /** 10 * 新闻条目的实体类 11 * 按时间,点击量,标题。排序 12 * 【1】时间降序 13 * 【2】时间相同,点击量升 14 * 【3】时间相同,点击量相同,标题长度降序。 15 * @ClassName: NewItem 16 * @Description: TODO(这里用一句话描述这个类的作用) 17 * @author 尚晓飞 18 * @date 2014-8-8 下午6:53:18 19 * 20 */ 21 public class NewItem implements java.lang.Comparable<NewItem>{ 22 private String title;//标题 23 private int hits;//点击量 24 private Date pubTime;//发布时间 25 26 public NewItem() { 27 super(); 28 } 29 30 31 /** 32 * 第一种思路:实体类实现java.lang.Comparable接口,compareTo方法,在方法中写排序规则 33 * 34 * 时间降序+点击量升序+标题降序 35 * @Title: compareTo 36 * @Description: TODO(这里用一句话描述这个方法的作用) 37 * @author 尚晓飞 38 * @date 2014-8-8 下午6:59:03 39 * @param o 40 * @return 41 * @see java.lang.Comparable#compareTo(java.lang.Object) 42 */ 43 @Override 44 public int compareTo(NewItem o) { 45 // TODO Auto-generated method stub 46 int result=0; 47 //比较发布时间(降序)(内置时间类,有排序功能,但是是升序) 48 result=-this.pubTime.compareTo(o.pubTime); 49 //如果发布时间相同,则按点击量排序 50 if(0==result){ 51 //比较点击量(升序) 52 result=this.hits-o.hits; 53 //如果点击量相同,则按标题长度排序(降序) 54 if(0==result){ 55 //比较标题(长度降序) 56 result=-this.title.compareTo(o.title); 57 return result; 58 }else{ 59 return result; 60 } 61 }else{ 62 return result; 63 } 64 } 65 66 67 /** 68 * 重写toString方法,方便测试打印 69 * @Title: toString 70 * @Description: TODO(这里用一句话描述这个方法的作用) 71 * @author 尚晓飞 72 * @date 2014-8-8 下午7:20:55 73 * @return 74 * @see java.lang.Object#toString() 75 */ 76 @Override 77 public String toString() { 78 StringBuilder sb=new StringBuilder(); 79 sb.append("标题:").append(this.title); 80 sb.append("---发布时间:").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.pubTime));//将时间按某种格式输出 81 sb.append("---点击量:").append(this.hits).append("\n");//加一个回车 82 83 return sb.toString(); 84 85 } 86 87 88 public NewItem(String title, int hits, Date pubTime) { 89 super(); 90 this.title = title; 91 this.hits = hits; 92 this.pubTime = pubTime; 93 } 94 95 public String getTitle() { 96 return title; 97 } 98 99 public void setTitle(String title) { 100 this.title = title; 101 } 102 103 public int getHits() { 104 return hits; 105 } 106 107 public void setHits(int hits) { 108 this.hits = hits; 109 } 110 111 public Date getPubTime() { 112 return pubTime; 113 } 114 115 public void setPubTime(Date pubTime) { 116 this.pubTime = pubTime; 117 } 118 119 120 }