大致流程:
排序是用到排序的接口Comparator<T>
你要先建一個類實現比較器Comparator
//大致流程
public class StuComp implements Comparator<Student> { public int compare(Student o1, Student o2) { return o1.getName().compareToIgnoreCase(o2.getName()); } }
然后在Collections.sort(list);的時候加上這個排序比較器
Collections.sort(list,new StuComp());結果就對了。
舉例:有一個關於消息的實現類,根據消息的時間從大排到小,根據消息的是否已讀讓未讀的排前,已讀的拍后
消息的實現類:
package com.educationcrm.model; /** * Created by laobiao on 2016/5/21. * 消息列表對象 */ public class NewsListModel { private int NewsId;//消息ID private String sendName;//發送人姓名 private String title;//消息的標題 private String day;//消息發送時間 private String idRead;//是否已讀 private String type;//消息類型 public NewsListModel(int newsId, String sendName, String title, String day, String idRead, String type) { NewsId = newsId; this.sendName = sendName; this.title = title; this.day = day; this.idRead = idRead; this.type = type; } public int getNewsId() { return NewsId; } public void setNewsId(int newsId) { NewsId = newsId; } public String getSendName() { return sendName; } public void setSendName(String sendName) { this.sendName = sendName; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDay() { return day; } public void setDay(String day) { this.day = day; } public String getIdRead() { return idRead; } public void setIdRead(String idRead) { this.idRead = idRead; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
這里是兩個排序方法;
//日期比較 class dayComparator implements Comparator<NewsListModel>{ @Override public int compare(NewsListModel o1, NewsListModel o2) { if(o1==null){ return -1; } if(o2==null){ return -1; } SimpleDateFormat sim = new SimpleDateFormat("MM月dd日 HH:mm"); try { long o1date=sim.parse(o1.getDay()).getTime(); long o2date=sim.parse(o2.getDay()).getTime(); if(o1date>o2date){ return -1; }else { return 1; } } catch (ParseException e) { e.printStackTrace(); } return 0; } } //是否已讀比較,通過判斷他們的已讀屬性來返回值 class isReadComparator implements Comparator<NewsListModel>{ @Override public int compare(NewsListModel o1, NewsListModel o2) { if(o1==null){ return -1; } if(o2==null){ return 1; } if(o1.getIdRead()=="yes" && o2.getIdRead()=="no"){ return 1; } if (o1.getIdRead()=="no" && o2.getIdRead()=="yes"){ return -1; } return 0; }
下面是實現方法:
Collections.sort(a,new dayComparator());//先進行日期排序 Collections.sort(a,new isReadComparator());//再進行時間排序
用到的類和方法:
排序工具類:Comparator<T>;
排序判斷方法:compare; 返回值為1時,第二個參數會排在第一個參數前面,-1則第一個參數排前面,0時則不排序;
調用排序方法:sort(<T>object,Comparator<T> x);
新建一個Comparator<T>的實現類,在類中重寫compare()方法;再使用list.sort()方法來調用這個實現類,即可實現排序;