我找到的每个示例都是按字母顺序执行此操作,而我需要按日期对元素进行排序。
我的 ArrayList 包含其中一个数据成员是 DateTime 对象的对象。在 DateTime 我可以调用函数:
lt() // less-than lteq() // less-than-or-equal-to
所以比较我可以做类似的事情:
if(myList.get(i).lt(myList.get(j))){ // ... }
我应该在 if 块内做什么?
您可以使您的对象具有可比性:
public static class MyObject implements Comparable<MyObject> { private Date dateTime; public Date getDateTime() { return dateTime; } public void setDateTime(Date datetime) { this.dateTime = datetime; } @Override public int compareTo(MyObject o) { return getDateTime().compareTo(o.getDateTime()); } }
然后通过调用对它进行排序:
Collections.sort(myList);
但是,有时您不想更改模型,例如当您想对几个不同的属性进行排序时。在这种情况下,您可以动态创建比较器:
Collections.sort(myList, new Comparator<MyObject>() { public int compare(MyObject o1, MyObject o2) { return o1.getDateTime().compareTo(o2.getDateTime()); } });
但是,仅当您确定比较时 dateTime 不为空时,上述方法才有效。明智的做法是处理 null 以避免 NullPointerExceptions:
public static class MyObject implements Comparable<MyObject> { private Date dateTime; public Date getDateTime() { return dateTime; } public void setDateTime(Date datetime) { this.dateTime = datetime; } @Override public int compareTo(MyObject o) { if (getDateTime() == null || o.getDateTime() == null) return 0; return getDateTime().compareTo(o.getDateTime()); } }
或者在第二个例子中:
Collections.sort(myList, new Comparator<MyObject>() { public int compare(MyObject o1, MyObject o2) { if (o1.getDateTime() == null || o2.getDateTime() == null) return 0; return o1.getDateTime().compareTo(o2.getDateTime()); } });