我想对Process对象的arraylist进行排序。进程有2个参数:startTime和duration。我想在startTime中按升序对arraylist进行排序,对于相同的startTime,我想按持续时间的升序排序。我该怎么做?
答案 0 :(得分:1)
首先,我假设您的Process类看起来像这样(加上其他东西):
public class Process{
private int startTime;
private int duration;
public int getStartTime(){
return startTime;
}
public int getDuration(){
return duration;
}
}
第一个选择,&#34;默认&#34;进程的排序方法是你所说的方法(首先是startTime升序,然后是持续时间升序),你可以制作流程工具Comparable<Process>
:
public class Process implements Comparable<Process>{
private int startTime;
private int duration;
public int compareTo(Process other){
if(startTime < other.startTime) return -1;
if(startTime > other.startTime) return 1;
//If here, startTime == other.startTime
if(duration < other.duration) return -1;
if(duration > other.duration) return 1;
return 0;
}
}
然后您可以使用简单方法对ArrayList<Process>
进行排序:
ArrayList<Process> a = new ArrayList<Process>();
//Fill up a with process instances
Collections.sort(a); //Sorts according to the compareTo method in Process.
但是,如果这不是分类流程的默认方法,(或者您无法使流程实现可比较,那么您将需要定义一个自定义Comparator<Process>
如下:
class ProcessComparator implements Comparator<Process>{
public int compare(Process p1, Process p2){
if(p1.getStartTime() < p2.getStartTime()) return -1;
if(p1.getStartTime() > p2.getStartTime()) return 1;
//If here, p1.startTime == other.startTime
if(p1.getDuration() < p2.getDuration()) return -1;
if(p1.getDuration() > p2.getDuration()) return 1;
return 0;
}
}
然后,使用一个:
ArrayList<Process> a = new ArrayList<Process>();
//Fill up a with process instances
Collections.sort(a, new ProcessComparator()); //Sorts according to the compareTo method in Process.
答案 1 :(得分:0)
您可以创建自定义Comparator
。
或者您可以创建可重复使用的比较器来帮助进行未来的排序。例如,您可以使用Bean Comparator,它允许您对Process
对象的属性进行排序。该链接包含使用BeanComparator
或创建自定义Comparator
的示例代码。
然后,您可以使用Group Comparator,它允许您同时对多个属性进行排序。