關於自定義 List集合排序的方法!


大致流程:

排序是用到排序的接口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()方法來調用這個實現類,即可實現排序;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM