关于自定义 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()方法来调用这个实现类,即可实现排序;
关于自定义 List集合排序的方法!的更多相关文章
- Collections -集合排序compareTo方法重写,shuffle,addall
package cn.learn.collection.Collections; /* 排序的对象的类,实现comparable借口,重写compareto方法 若要打印必须重写toString方法, ...
- List集合排序的方法
1.list集合中的对象实现Comparable接口 public class User implements Comparable<User>{ private Integer id; ...
- JS 对Array集合排序的方法
我的业务是根据距离的远近经行一个排序: 第一种方法:冒泡排序 排序前的数据是这样子的: 排序后是这样子的: 代码可以直接复制使用的: <!doctype html> <html> ...
- Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...
- Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例
1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...
- 【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序
在C#的List集合操作中,有时候需要针对List集合进行排序操作,如果是对List集合按照元素对象或者元素对象的某个属性进行倒序排序的话,可以使用OrderByDescending方法来实现,Ord ...
- ArrayList 排序Sort()方法扩展
1.sort() sort可以直接对默认继承 IComparable接口的类进行排序,如:int.string.... ArrayList arrayList = new ArrayList(); , ...
- CopyOnWriteArrayList集合排序异常问题
1.集合自定义排序实现 对List集合的自定义排序想必大家都知道要使用如下的方式,通过实现Comparator接口并实现compare方法来实现. /** * * @方法名 changeChain * ...
- 【转载】C#中自定义Sort的排序规则IComparable接口
C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...
随机推荐
- mysql注入大全及防御
0.明白存在的位置:get型 post型 cookie型 http头注入 1.先测试注入点,注册框.搜索框.地址栏啥的,判断是字符型,搜索型还是数字型 字符型 1' and '1'='1 成功, 1' ...
- kali下纯文本与窗口环境切换
切到纯文本环境,想返回 试了半天ctrl+alt+f7不行, 最后我想试试ctrl+alt+f8竟然成了: 而且那是之前以root账户登录图像界面时切换回去是f8,普通用户是f9 ,为何如此,我还不 ...
- symfony学习笔记——路由
symfony的路由其实就是通过url映射到控制器的一个设置 _test: path: /test/{type}/{page} methods: [GET] defaults: {_con ...
- linux centos中安装flash player
本机为centos 7.0 64 1.用火狐浏览器随便打开一个视频网站,找到一个视频点进去,网站会提示未安装flash player.点击进去到adobe官网.2.下载flash player插件,可 ...
- (转) Oracle SQL优化必要的全表扫描思路分析
大多数情况下,我们需要避免SQL在查询时进行全表扫描(FTS),但是对于必须需要进行全表扫描的情况,也可以进行一些优化处理. 即使全表扫描是检索所需数据的唯一可行方法,仍然有多种方法来提升查询性能.优 ...
- 利用angular4和nodejs-express构建一个简单的网站(十)—好友模块
上一章讲解了用户登录的相关代码.用户登录成功后,就会进入好友模块,在好友模块中会根据不同的用户ID显示相应的好友列表,点击好友列表中的单个好友就会进入编辑单个好友页面,对好友信息进行编辑.点击列表页面 ...
- oracle查询语句执行顺序
完整的查询语句类似是这样的: select ..., ROWNUM from table where <where clause> group by <columns> hav ...
- js时间转时间戳
转换成时间戳 new Date('2018-10-11 14:28:47'.replace(/-/g, '/')).getTime() //1539239327000
- canvas实现圆角图片 (处理原图是长方形或正方形)
/** * 生成图片的缩略图 * @param {[type]} img 图片(img)对象或地址 * @param {[type]} width 缩略图宽 * @param {[type]} hei ...
- 019:re_path函数详解
re_path使用: 1.re_path和path的作用是一样的,只不过re_path在写url的时候可以使用正则表达式——功能更加强大: 2.使用正则表达式时,推荐使用原生字符串(即:已 r 开头的 ...