自定义引用类型放入集合中,按实际业务需求进行排序的两种思路

第一种思路:

  (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 }
View Code

相关文章:

  • 2022-02-28
  • 2021-06-02
  • 2022-12-23
  • 2021-09-16
  • 2021-11-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2020-11-14
  • 2021-09-30
  • 2021-06-05
  • 2021-07-15
  • 2022-12-23
相关资源
相似解决方案