关于自定义 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()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...
随机推荐
- unittest assert断言
unittest常用的断言方法 1.assertEqual(self, first, second, msg=None) --判断两个参数相等:first == second 2.assertNotE ...
- 初探CSS - 5 创建
CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档. 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet) 内部样式表(Interna ...
- 安卓的几种alert对话框
@Override public void onClick(View v) { switch (v.getId()) { case R.id.d1: AlertDialog.Builder build ...
- 基于双XCKU060+双C6678 的双FMC接口40G光纤传输加速计算卡
基于双XCKU060+双C6678 的双FMC接口40G光纤传输加速计算卡 一.板卡概述 板卡采用基于双FPGA+双DSP的信号采集综合处理硬件平台,板卡大小360mmx217mm.板卡两片FPGA提 ...
- Java内部类的整理。
Java 内部类 分四种:成员内部类.局部内部类.静态内部类和匿名内部类. 成员内部类: (1)即作为外部类的一个成员存在,与外部类的属性.方法并列. 注意:成员内部类中不能定义静态变量,但可以访问外 ...
- jenkins打包maven工程发现有些包下载不下来
将这些依赖的jar包放到mvn的本地仓库中,通常是用户主目录下的.m2/repository https://blog.csdn.net/taiyangdao/article/details/5228 ...
- squid之------ACL控制
一.ACL概念 Squid提供了强大的代理控制机制,通过合理设置ACL(Access Control List,访问控制列表)并进行限制,可以针对源地址.目标地址.访问的URL路径.访问的时间等各 ...
- 跨域 (3) window.name
window对象有一个name属性,该属性有一个特征:即在一个窗口的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每一个页面对window.name都有读写的权限,window ...
- LOJ-6277-数列分块入门1(分块)
链接: https://loj.ac/problem/6277 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间加法,单点查值. 思路: 线段树可以解决,用来学习分块. 分块概念就是,将序列分 ...
- IP地址(参考百度百科)
题目1:用子网掩码划分网络时,如果划分8个子网,则需要4位.因为24-2>=8.(全0代表网络自身,全1代表广播地址,所以减2) 以C类地址为例,(1)8个子网,则4位子网,主机号为后4位,主机 ...