使用Comparator接口对List进行排序
来源:互联网 发布:购物软件排行2016 编辑:程序博客网 时间:2024/05/03 09:32
需求:
1、对任务进行排序,未完成任务排在最前面,接着是7天之内完成的任务,最后是7天之后完成的任务
2、按计划开始时间倒序排
实现:
1、创建一个类实现Comparator接口
/**
* 任务排序Comparator
* 排序规则为:
* (1)未完成,7天之内完成,7-30天完成
* (2)按计划开始时间倒序排
* @author yucan
*
*/
public class TaskComparator implements Comparator<Task> {
public int compare(Task o1, Task o2) {
int o1score = 1;
int o2score = 1;
if(o1.getStatus()!=2 && o1.getStatus()!=3 ){
o1score = 30;
}else{
if(getDateSpace(o1.getPlanEndDate(),new Date())<=7){
o1score = 20;
}
else{
o1score = 1;
}
}
if(o2.getStatus()!=2 && o2.getStatus()!=3 ){
o2score = 30;
}else{
if(getDateSpace(o2.getPlanEndDate(),new Date())<=7){
o2score = 20;
}
else{
o2score = 1;
}
}
int o3score = o2.getPlanStartDate().compareTo(o1.getPlanStartDate());
return o2score-o1score+o3score;
}
public static int getDateSpace(Date date1, Date date2){
Calendar calst = Calendar.getInstance();;
Calendar caled = Calendar.getInstance();
calst.setTime(date1);
caled.setTime(date2);
//设置时间为0时
calst.set(Calendar.HOUR_OF_DAY, 0);
calst.set(Calendar.MINUTE, 0);
calst.set(Calendar.SECOND, 0);
caled.set(Calendar.HOUR_OF_DAY, 0);
caled.set(Calendar.MINUTE, 0);
caled.set(Calendar.SECOND, 0);
//得到两个日期相差的天数
int days = ((int)(caled.getTime().getTime()/1000)-(int)(calst.getTime().getTime()/1000))/3600/24;
return days;
}
}
2、使用TaskComparator对List进行排序
Collections.sort(taskList, new TaskComparator());
附(任务类Task.java):
public class Task extends BaseBean {
private static final long serialVersionUID = 1L;
private Long taskId;//任务ID
private Project project;//关联项目
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
private String taskCode;//项目任务编码
private String taskName;//项目任务名称
private User originator;//需求发起人
private String description;//项目任务描述
private String memo;//任务备注信息
private Date planStartDate;//计划开始日期
private Date planEndDate;//计划结束日期
private double planTime;//计划工时
private User manager;//技术经理
private Date startDate;//实际开始日期
private Date endDate;//实际结束日期
private double delayTime;//延迟工时
private double delayDays;//延迟天数
private User testers;//测试人员
private Short status;//任务状态:1为进行中、2为提前、3为完成、4为警告、5为超时
private Short active;//是否有效状态,0为无效,1为有效
private Short isPhone;//是否在手机端显示,1为是,0为否
public Short getIsPhone() {
return isPhone;
}
public void setIsPhone(Short isPhone) {
this.isPhone = isPhone;
}
private List<TaskProgress> taskProgressList;
private List<SubTask> subTaskList;
public User getOriginator() {
return originator;
}
public void setOriginator(User originator) {
this.originator = originator;
}
public User getManager() {
return manager;
}
public void setManager(User manager) {
this.manager = manager;
}
public User getTesters() {
return testers;
}
public void setTesters(User testers) {
this.testers = testers;
}
public List<TaskProgress> getTaskProgressList() {
return taskProgressList;
}
public void setTaskProgressList(List<TaskProgress> taskProgressList) {
this.taskProgressList = taskProgressList;
}
public List<SubTask> getSubTaskList() {
return subTaskList;
}
public void setSubTaskList(List<SubTask> subTaskList) {
this.subTaskList = subTaskList;
}
public Long getTaskId() {
return taskId;
}
public void setTaskId(Long taskId) {
this.taskId = taskId;
}
public String getTaskCode() {
return taskCode;
}
public void setTaskCode(String taskCode) {
this.taskCode = taskCode;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public Date getPlanStartDate() {
return planStartDate;
}
public void setPlanStartDate(Date planStartDate) {
this.planStartDate = planStartDate;
}
public Date getPlanEndDate() {
return planEndDate;
}
public void setPlanEndDate(Date planEndDate) {
this.planEndDate = planEndDate;
}
public double getPlanTime() {
return planTime;
}
public void setPlanTime(double planTime) {
this.planTime = planTime;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public double getDelayTime() {
return delayTime;
}
public void setDelayTime(double delayTime) {
this.delayTime = delayTime;
}
public double getDelayDays() {
return delayDays;
}
public void setDelayDays(double delayDays) {
this.delayDays = delayDays;
}
public Short getStatus() {
return status;
}
public void setStatus(Short status) {
this.status = status;
}
public Short getActive() {
return active;
}
public void setActive(Short active) {
this.active = active;
}
}
- 使用Comparator接口对List进行排序
- 使用Comparator对List排序
- 用Comparator对List<Map>进行排序
- comparator对list排序
- 使用Comparator对ArrayList进行排序
- JAVA中,comparator接口对数据进行排序
- java的Comparator接口如何对指定类型进行排序。
- 使用Comparator 接口 排序
- 实现comparator接口,进行排序
- Comparator,Collections对List排序!
- java 使用 Comparator接口 进行多种情况排序
- java对list集合使用comparator方法比较排序
- java 使用comparator接口对ArrayList排序无效
- 关于使用Comparator对集合进行强制排序.
- java List利用Comparator进行排序
- 使用Collections对list进行排序
- 使用Collections.sort对List进行排序
- Java之——利用Comparator接口对多个排序条件进行处理
- GradleUserGuide中文版 14)Tasks 15)文件操作
- 物理层、连接层、网络层、传输层、应用层概述
- 白话经典算法系列之一 冒泡排序的三种实现
- Windows Server 2016 TP5 14300发布,免费下载
- 支付宝Mobile
- 使用Comparator接口对List进行排序
- 大数据分析工具盘点-你不知道的15个新技术
- Ionic:环境搭建和创建一个项目
- IntelliJ IDEA 12创建Maven管理的Java Web项目(图解)
- 使用virtualenv创建虚拟python环境
- 数据结构之数组篇
- iOS swift运算符详解
- Layout动画:在android布局发生变化时添加动画效果
- 计算机网络自顶向下方法之——第二章 之三