使用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
Comparator 對list按照某個屬性進行排序
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.排序方式 下面是匿名內部類,實現了排序借