我有一个自定义对象,其结构是
public String name;
public int type;
public String createdOn;
createdOn
是日期,其格式为:2011-12-16T23:27:27+0000
我已经存储了多个这种类型的对象,ArrayList
现在我想根据那里的创建日期和时间对它们进行排序。
我尝试过使用Collections.sort(....)
,但没有合适的结果。
我有一个自定义对象,其结构是
public String name;
public int type;
public String createdOn;
createdOn
是日期,其格式为:2011-12-16T23:27:27+0000
我已经存储了多个这种类型的对象,ArrayList
现在我想根据那里的创建日期和时间对它们进行排序。
我尝试过使用Collections.sort(....)
,但没有合适的结果。
得到答案后做了一些研发,我解决了排序的问题,这里是按日期对数组列表进行排序的代码。
Collections.sort(arrlst,new Comparator<T>() {
public int compare(T lhs, T rhs) {
try {
SimpleDateFormat dateFormatlhs = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date convertedDatelhs = dateFormatlhs.parse(lhs.feedCreatedTime);
Calendar calendarlhs = Calendar.getInstance();
calendarlhs.setTime(convertedDatelhs);
SimpleDateFormat dateFormatrhs = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date convertedDaterhs = dateFormatrhs.parse(rhs.feedCreatedTime);
Calendar calendarrhs = Calendar.getInstance();
calendarrhs.setTime(convertedDaterhs);
if(calendarlhs.getTimeInMillis() > calendarrhs.getTimeInMillis())
{
return -1;
}
else
{
return 1;
}
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
});
你必须使用Collections.sort(List<T> list, Comparator<? super T> c)
和实现一个比较器,比如
Comparator c = new Comparator<YourObject>() {
public int compare(YourObject o1, YourObject o2) {
return o1.createdOn.compareTo(o2.createdOn);
}
}
您应该在自定义对象中使用Comparator或实现Comparable。
实现 Comparable 可以为对象定义自然排序。在Comparable.compareTo()方法中,您必须将当前对象与另一个对象进行比较并返回
一个例子:
public class CustomObject implements Comparable<CustomObject> {
@Override
public int compareTo(CustomObject otherOne) {
// Compare the current object with the otherOne and return an
// appropriate integer
return 0;
}
}
// To sort
Collections.sort(listOfCustomObjects);
另一方面,实现一个比较器,您可以在自定义对象的代码之外指定一个排序标准。使用适当的Collections.sort()方法,您可以指定集合中对象的顺序。Comparator.compare()方法遵循上述相同的规则。
一个例子:
public class CustomObjectComparator implements Comparator<CustomObject> {
@Override
public int compare(CustomObject a, CustomObject b) {
// Compare a with b and return an appropriate integer
return 0;
}
}
// To sort
Collections.sort(list, new CustomObjectComparator());
对于自定义对象,您需要自定义比较器,或者您需要使类具有可比性。
您可以每次转换日期字符串,也可以只比较字符串(前提是时区不变)
正如已经建议的那样,将日期存储为 Date 或 long 可能是更好的选择。
您是否尝试过实施您的自定义Comparator
?
new Comparator<CustomObject>() {
public int compare(CustomObject o1, CustomObject o2) {
//compare by date
return <-1 or 0 or 1>;
}
}
你的类应该实现 interface Comparable
。在这种情况下,您可以compareTo()
根据需要实现方法。
或者,您可以实现自定义比较器:
class MyCreationDateComparator implements Comparator<MyClass> {
public int compare(MyClass o1, MyClass o2) {
// implement your logic here.
}
}
现在使用Collections.sort()
接受自定义比较器的版本。如果您的比较器很简单,您可以使用匿名内部类。
按照此处的说明,只需使用 Date 类中的方法来比较日期