基本上我有一个具有name和startDate的对象的arraylist,它们的初始顺序类似于:
Frank 10/20/1990
Bill 1/2/1990
Frank 2/2/1990
John 9/8/1990
Bill 4/4/1990
Frank 5/1/1990
我试图对它们进行排序,以便对于声明的每个新客户名称,所有具有相同名称的客户对象必须按其日期的升序排列在彼此旁边,因此最终排序列表应该看起来像:
Frank 1/1/1990
Frank 5/1/1990
Frank 10/20/1990
Bill 1/2/1990
Bill 4/4/1990
John 9/8/1990
我一直想弄清楚几个小时无济于事,希望有人可以提前帮助我!
答案 0 :(得分:1)
Java collections framework没有排序列表,因此这个答案为您提供了一种对给定的未排序列表进行排序的方法。如果您想实际维护已排序的集合,那么您可以查看SortedSet
之类的内容,例如TreeSet
。
您可以为包含名称和日期的类定义自定义比较器(让我们称之为Wrapper
),然后使用它对列表进行排序:
public static Comparator<Wrapper> wrapperComparator
= new Comparator<Wrapper>() {
public int compare(Wrapper w1, Wrapper w2) {
if (w1 == null && w2 == null) {
return -0;
}
else if (w1 == null && w2 != null) {
return 1;
}
else if (w1 != null && w2 == null) {
return -1;
}
else if (w1.getName().equals(w2.getName()) {
return w1.getDate().compareTo(w2.getDate());
}
else {
return w1.getName().compareTo(w2.getName());
}
}
};
现在使用此自定义比较器使用Collections.sort
实用程序对列表进行排序。
Collections.sort(yourList, wrapperComparator);
请注意,我在这里做了一些假设。我假设您的列表可能具有空值,在这种情况下,我将空值视为更大而不是任何其他值。我还假设给定的Wrapper
对象永远不会有空名称或日期。如果不是这种情况,您必须在上述代码中添加一些空检查。