关于自定义 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()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...
随机推荐
- vue.js(5)--事件修饰符
vue中的事件修饰符(.stop..prevent..self..capture..once) (1)实例代码 <!DOCTYPE html> <html lang="en ...
- 2019-11-29-dotnet-core-使用-CoreRT-将程序编译为-Native-程序
title author date CreateTime categories dotnet core 使用 CoreRT 将程序编译为 Native 程序 lindexi 2019-11-29 08 ...
- 002-Saltstack自动化操作记录(2)-配置使用
之前梳理了就是第一篇001,下面说说saltstack配置及模块使用: 为了试验效果,再追加一台被控制端minion机器192.168.1.118需要在master控制端机器上做好主机名映射关系 1 ...
- Permute Digits
You are given two positive integer numbers a and b. Permute (change order) of the digits of a to con ...
- 单调队列优化DP || [SCOI2010]股票交易 || BZOJ 1855 || Luogu P2569
题面:P2569 [SCOI2010]股票交易 题解: F[i][j]表示前i天,目前手中有j股的最大收入Case 1:第i天是第一次购买股票F[i][j]=-j*AP[i]; (1<=j< ...
- 公司内网机器vm ubuntu proxy 设置
解决浏览器上网问题: System Setting -> Network -> Network Proxy设置公司的代理 解决apt联网问题: 在/etc/apt/apt.conf文件里加 ...
- 【洛谷P4677】山区建小学
题目大意:给定一个长度为 N 的序列,现选出 M 个点组成一个集合,求这 N 个点到这个集合的最近距离的和是多少. 题解: 状态设计为 dp[i][j] 表示前 i 个点中选出 j 个点的最近距离和是 ...
- DevExpress WPF v19.1新版亮点:Data Editors等控件新功能
行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPFv19.1中新增的一些控件及部分 ...
- SQL语句 运算符
6.2 运算符 6.2.1 算术运算符 加 / 减 / 乘 / 除 6.2.2 连接运算符 是用来连接字符串的.跟java中的 + 是一致的. select 'abc' || ' bcd ' as ...
- 移动端 使用 vConsole调试
前言 用vue 写移动端代码,有个报名页面 就在iOS 9下出现问题,vue的循环渲染都正常,一开始的数据也能取到.证明不是vue的兼容性问题 但是在用户点击按钮发现不能点击进入跳转 工具 推荐使用 ...