1. 程式人生 > >使用Comparator介面對List進行排序

使用Comparator介面對List進行排序

需求:

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進行排序

需求: 1、對任務進行排序,未完成任務排在最前面,接著是7天之內完成的任務,最後是7天之後完成的任務 2、按計劃開始時間倒序排 實現: 1、建立一個類實現Comparator介面 /**  * 任務排序Comparator  * 排序規則為:  * (1)未完成,7天之內

collections.sort對javabean的list進行排序

collection.sort javabean 1、collection.sort排序算法底層實際是 將集合轉換成array,再執行arrays.sort,arrays.sort利用歸並排序,優化的快排,timSort等方式。2、對string類型數據排序public static void col

Tool面對MapReduce進行優化

繼承Configured,實現Tool,不在run方法中new Configuration,呼叫run時,用ToolRunner呼叫 package com.kfk.hadoop.mr; import org.apache.hadoop.conf.Configuratio

利用Comparator對列舉型別進行排序的實現(ComparatorChain、BeanComparator、FixedOrderComparator)

背景:         工作中遇到按照類的某個屬性排列,這個屬性是個列舉型別(完全是自定義的,沒有明顯的比較標誌),現要按照要求的優先順序排列。        如一個蘋果類有大小和甜度屬性,大小有“特大”,“大”,“中”,“小”,“很小”的等級,甜度有“很甜”,“甜”

Java中Lamda表示式對List進行排序

public class MainTest { public static void main(String[] args) { List<String> list = Arrays.asList( "2018121207","2018121206","2018121

Kotlin對list進行排序的一種方法

今天看了java排序的方法,自己用kotlin寫了一個小的list的排序,程式碼如下。 1.首先定義一個內部類,用於比較list中兩個數的大小 inner class User : Comparable<User> { var name: String

List進行排序

/** * 對List<Map>進行排序 */private List<Map<String, Object>> OrderBytoList(List<Map<String, Object>> mlist) {My

Util工具類 對map中含有String型別的日期key值的list進行排序

/** * 對含有map的list排序 * * @param areaList 原始值 * @param isDesc TRUE:從大到小 FALSE:從小到大 */ public s

java collection.sort() 根據物件的某個屬性對list進行排序

1基本型別的list排序/** * 對List物件按照某個成員變數進行排序 * @param list List物件 * @param sortField 排序的屬性名稱 * @param sortMode 排序方式:ASC,DESC 任選其

List進行排序

使用Java中提供的對集合進行操作的工具類Collections,其中的sort方法,重寫比較方法 /** * 根據序號對列席人進行排序 * @param lxrUser * @return */ public List<Map<String

利用Java面對HDFS進行讀寫操作

1. 從HDFS中讀取檔案內容 使用URL import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; import java.io.IOExce

使用Java8新特性對List進行排序

前言: 在專案開發中往往會遇到各種資料需要排序展示在頁面上,常見的從資料庫查使用資料庫的排序,還有一種就是使用我們的開發語言進行排序,這裡給大家演示使用java8的新特性進行排序,眾所周知java8帶來了函數語言程式設計和Lambda表示式等新特性,下面我們就開始演示了:

根據java反射機制 通過傳入的引數 對傳入的List 進行排序

import java.lang.reflect.Field; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Sor

C# 中使用Linq和Lambda表示式對List進行排序

C#中List<T>排序的兩種方法 List<Student> stu = (List<Student>)Session["StudentList"]; Lin

java使用Comparator根據list物件的屬性進行排序

List<FormInfo.FixedInput> fixedInputs=packagingFixedInput(forms,formData,isLogic,logicIds,attachments); fixedInputs.addAll(formInfo.getFixedInp

Comparatorlist按照某個屬性進行排序

List<Node> list =new ArrayList<Node>(); Collections.sort(kdAndKnList, new LofComparator()); class LofComparator implements Co

java list集合使用Collections中的sort方法進行排序Comparator),超實用

在java中有沒有遇到對list集合進行排序,其實很簡單的,需要集合類Collections中sort方法 public static <T> void sort(List<T&g

C#如何對List中的Object進行排序

過多 code same ascend 多個 delegate del object compareto 首先定義一個List類,這個類裏面包含了Name和Total兩個屬性變量,下面就是針對這兩個變量進行排序。 public class Player { pub

java list按照元素對象的指定多個字段屬性進行排序

ase 日期 pri num tex itl pop sha 轉換 ListUtils.Java---功能類 http://blog.csdn.net/jiangyu1013/article/details/53894218 [java] view plain co

list集合如何對裏面的元素進行排序

匿名 src .cn .so com image turn cnblogs 公共類 Collections 是集合的公共類,提供各種工具,其中提供了排序方法。 Collections.sort(),方法兩個參數,1,要排序的集合,2.排序方式 下面是匿名內部類,實現了排序借