关于自定义 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()方法来调用这个实现类,即可实现排序;

 

转载于:https://www.cnblogs.com/laobiao/p/5515525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值