关于自定义 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()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...
随机推荐
- celery开发中踩的坑
celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...
- python-ssh-远程服务器+远程docker执行命令
在python语言中实现远程服务器执行命令+远程dcoker执行命令 def ssh_exec_command(ip, username, password, cmd=None): "&qu ...
- puppet工简介一
puppet简介一 puppet工作原理 puppet 是一个配置管理工具, 典型的, puppet 是一个 C/S 结构, 当然,这里的 C 可以有很多,因 此,也可以说是一个星型结构. 所有的 p ...
- 021-Zabbix4.2对IIS监控摸索记录
Zabbix是很强大,但是相关的细节技术文档貌似很少,摸索之路就显得异常难. 度娘搜了下,关于Zabbix对IIS的监控资料确实有,确实也讲如何操作了,但是细细按照对方的要求操作下,总是缺数据,no ...
- hdu 1003 最大连续子串
#include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #defin ...
- HDU - 4358 Boring counting (树上启发式合并/线段树合并)
题目链接 题意:统计树上每个结点中恰好出现了k次的颜色数. dsu on tree/线段树合并裸题. 启发式合并1:(748ms) #include<bits/stdc++.h> usin ...
- Python之网路编程之-互斥锁与进程间的通信(IPC)及生产者消费者模型
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
- Rsync服务端部署流程
Rsync服务端部署流程 Rsync服务端部署流程: 一.rsync服务端配置流程 配置rsync配置文件/etc/rsyncd.conf 创建同步的本地目录/dingjian 并根据需要 ...
- java 各版本新特性
Java 5,6,7,8,9,10,11新特性吐血总结 lkd_whh关注赞赏支持 12018.04.01 14:09:15字数 1,948阅读 10,615 作者:拔剑少年 简书地址:https:/ ...
- day_08 字符编码乱码处理
Python3默认编码是unicode:而Python2是ASCII码.Windows环境默认是gbk编码. 常见编码错误原因: 1. Python解释器的默认编码 2. Python源文件文件编码 ...