大致流程:

排序是用到排序的接口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()方法来调用这个实现类,即可实现排序;

关于自定义 List集合排序的方法!的更多相关文章

  1. Collections -集合排序compareTo方法重写,shuffle,addall

    package cn.learn.collection.Collections; /* 排序的对象的类,实现comparable借口,重写compareto方法 若要打印必须重写toString方法, ...

  2. List集合排序的方法

    1.list集合中的对象实现Comparable接口 public class User implements Comparable<User>{ private Integer id; ...

  3. JS 对Array集合排序的方法

    我的业务是根据距离的远近经行一个排序: 第一种方法:冒泡排序 排序前的数据是这样子的: 排序后是这样子的: 代码可以直接复制使用的: <!doctype html> <html> ...

  4. Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  5. Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例

    1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...

  6. 【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序

    在C#的List集合操作中,有时候需要针对List集合进行排序操作,如果是对List集合按照元素对象或者元素对象的某个属性进行倒序排序的话,可以使用OrderByDescending方法来实现,Ord ...

  7. ArrayList 排序Sort()方法扩展

    1.sort() sort可以直接对默认继承 IComparable接口的类进行排序,如:int.string.... ArrayList arrayList = new ArrayList(); , ...

  8. CopyOnWriteArrayList集合排序异常问题

    1.集合自定义排序实现 对List集合的自定义排序想必大家都知道要使用如下的方式,通过实现Comparator接口并实现compare方法来实现. /** * * @方法名 changeChain * ...

  9. 【转载】C#中自定义Sort的排序规则IComparable接口

    C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...

随机推荐

  1. phpmyadmin导入大容量.sql文件

    phpmyadmin导入大容量.sql文件 在phpmyadmin目录文件夹下建立一个文件夹,如importSqlFile 将想要导入的sql文件放入importSqlFile文件夹中 打开confi ...

  2. 利用ios safari浏览器生成桌面快捷方式并唤醒app的示例代码

    html 内容: //通过a链接唤醒app  <a href="app约定好的scheme" id="qbt" style="display:n ...

  3. 第99:真正理解拉格朗日乘子法和 KKT 条件

  4. linux新建用户并分配sudo权限

    新建用户 useradd [username] 给用户设置密码 passwd [username] 设置sudo权限 首先将sudoers权限设置可写入 chmod u+w /etc/sudoers ...

  5. 【ESXI6.0】 ESXI6.0安装时无法安装网卡驱动的解决方法及将网卡驱动加载进ISO

    http://blog.163.com/xifanliang@yeah/blog/static/115078488201571584321787/ 若安装时提示如下图所示 之后安装无法完成,会提示没有 ...

  6. BufferedReader和PrintWriter读写中文的问题

    最近用BufferedReader读一个文本文件,然后再将读出的内容用PrintWriter写入到另外一个新的文件中. 之前一直没有发现这个问题,就是如果文本内容中有中文,在读出的内容和写入的内容都会 ...

  7. 第四篇:存储库之mongodb、redis、mysql

    MongoDB的简单操作 一.简介 二.MongoDB基础知识 三.安装 四.基本数据类型 五.增删改查操作 六.可视化工具 七.pymongo 一.简介 MongoDB是一款强大.灵活.且易于扩展的 ...

  8. 判断一个对象是否为空? js

    其实开发过程中常常会遇到判断对象和数组是否为空?下面介绍3种判断对象是否为空 1. 最常见的思路,for...in...遍历属性,为真则为“非空数组”:否则为“空数组” function judgeO ...

  9. sourceTree 添加 ssh key 方法

    1.使用 git 客户的生成公私钥:id_rsa.id_rsa.pub 1.1设置Git的user name和email: $ git config --global user.name " ...

  10. SOA架构及其架构分析

    一.什么是SOA SOA即面向服务的架构.分为三层结构:表示层(服务层).中间业务逻辑层.数据访问层. SOA是一种粗粒度.松耦合服务架构,服务之间通过简单.精确定义接口进行通讯,不涉及底层编程接口和 ...