使用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;
 }
}




1 0
原创粉丝点击