【发布时间】:2014-08-22 14:38:56
【问题描述】:
上课
import org.joda.time.DateTime;
public class Timestamp {
String id;
DateTime timestamp = new DateTime();
public Timestamp(String id, DateTime timestamp){
this.id = id;
this.timestamp = timestamp;
}
}
主函数
public static void main(String[] args) {
List<Timestamp > list = new ArrayList<Timestamp >();
list .add(new Timestamp ("1"));
list .add(new Timestamp ("2"), new DateTime().plusHours(1));
list .add(new Timestamp ("3"), new DateTime().plusHours(2));
list .add(new Timestamp ("4"), new DateTime().plusHours(3));
list .add(new Timestamp ("5"), new DateTime().plusHours(4));
list .add(new Timestamp ("1"), new DateTime().plusHours(5));
list .add(new Timestamp ("2"), new DateTime().plusHours(6));
list .add(new Timestamp ("3"), new DateTime().plusHours(7));
list .add(new Timestamp ("4"), new DateTime().plusHours(8));
list .add(new Timestamp ("5"), new DateTime().plusHours(9));
list .add(new Timestamp ("6"), new DateTime().plusHours(10));
list .add(new Timestamp ("1"), new DateTime().plusHours(11));
list .add(new Timestamp ("3"), new DateTime().plusHours(12));
list .add(new Timestamp ("7"), new DateTime().plusHours(13));
list .add(new Timestamp ("2"), new DateTime().plusHours(14));
list .add(new Timestamp ("3"), new DateTime().plusHours(15));
list .add(new Timestamp ("4"), new DateTime().plusHours(16));
list .add(new Timestamp ("8"), new DateTime().plusHours(17));
list .add(new Timestamp ("9"), new DateTime().plusHours(18));
list .add(new Timestamp ("10"), new DateTime().plusHours(19));
List<Object> newList = removeDuplicates(list);
}
如何从列表中删除重复的时间戳 id 并仅返回该 id 的最新时间戳时间。
我尝试使用以下方法,但已经遇到了无法正确删除 id 的问题。
public static List<Object> removeDuplicates(List<Timestamp > l) {
// ... the list is already populated
Set<Timestamp > s = new TreeSet<Timestamp >(new Comparator<Timestamp >() {
@Override
public int compare(Timestamp o1, Timestamp o2) {
if (o1.getId().equalsIgnoreCase(o2.getId())) {
return 0;
} else {
return 1;
}
}
});
s.addAll(l);
return Arrays.asList(s.toArray());
}
【问题讨论】:
-
为什么不首先将项目存储在
Set中?另外,不要将List<Timestamp>转换为List<Object>。 -
Set的语义是仅在不存在时才添加项目 - 这与我们的要求不同,即应存在具有相同 ID 的最后添加的时间戳。
标签: java sorting arraylist comparator