我有个课
public class SMS
{
public String addr;
public String body;
public String type;
public String timestamp;
}现在我已经做了一个对象的arrayList
ArrayList<SMS> temp = new ArrayList<SMS>();我增加了价值。现在,我想按照时间戳对arrayList进行排序。
如何根据时间戳按升序/降序对arrayList进行排序?
发布于 2014-04-13 06:23:43
要比较包含时间戳的字符串,首先需要将它们解析为long Long.parseLong(timestamp),然后使用Long.compare(x,y)比较数值。
所以不妨试着用Collections.sort(yorList, yourOwnComparator)
Collections.sort(temp, new Comparator<SMS>() {
@Override
public int compare(SMS o1, SMS o2) {
return Long.compare(Long.parseLong(o1.timestamp),
Long.parseLong(o2.timestamp));
}
});如果您可以将时间戳类型更改为long,则此代码如下所示
Collections.sort(temp, new Comparator<SMS>() {
@Override
public int compare(SMS o1, SMS o2) {
return Long.compare(o1.timestamp, o2.timestamp);
}
});在Java8中,您甚至可以使用lambda来缩短代码。
Collections.sort(temp, (SMS o1, SMS o2) -> Long.compare(o1.timestamp, o2.timestamp));甚至是
Collections.sort(temp, (o1, o2) -> Long.compare(o1.timestamp, o2.timestamp));发布于 2014-04-13 06:09:48
Collections.sort(temp);将对Comparable对象的集合进行排序,因此类SMS必须实现Comparable<SMS>:
public class SMS implementes Comparable<SMS>
{
public String addr;
public String body;
public String type;
public String timestamp;
@Override
public int compareTo(SMS other) {
//for instance
return addr.compareTo( other.addr );
}
}在实现Comparable时,通常是一种很好的做法,即也实现equals()和hashcode(),以便对象之间的相等性与它们的比较一致。另外,您应该添加一些针对空值的保护:
public class SMS implements Comparable<SMS>
{
public String addr;
public String body;
public String type;
public String timestamp;
@Override
public int compareTo(SMS other) {
//for instance
if( addr == null ) {
return Integer.MAX_VALUE;
}
return addr.compareTo( other.addr );
}
@Override
public boolean equals(Object other) {
//for instance
if( other instanceof SMS ) {
if( addr == null && ((SMS) other) != null ) {
return false;
}
return addr.equals(((SMS) other).addr);
} else {
return false;
}
return addr.compareTo( other.addr );
}
@Override
public int hashcode() {
//for instance
if( addr == null ) {
return 0;
}
return addr.hashcode();
}
}发布于 2014-04-13 06:14:31
使用Comparable (请参阅这里的例子),应该如下所示:
public class SMS implements Comparable<SMS>{
....
public int compareTo(SMS compareSms) {
return this.timestamp.compareTo(compareSms.timestamp);
}
}https://stackoverflow.com/questions/23039744
复制相似问题