[英]Sort and dedupe java collections
我想实现以下目标,我有一个列表形式的日期集合,我想要重复和排序。 我正在使用collections.sort按升序日期顺序对列表进行排序,然后使用treeSet从列表中复制和重复数据删除元素。 这是一个2枪的方法? 有更快的一步法吗?
EDIT::
Metadata
{
String name;
Date sourceDate;
}
基本上我想基于sourceDate订购元数据对象并重复它。
您可以跳过Collections#sort
步骤: TreeSet
将删除重复项并对条目进行排序。 所以基本上它是一个单行操作:
Set<Date> sortedWithoutDupes = new TreeSet<Date> (yourList);
如果日期是对象中的字段,您可以:
Comparator<YourObject>
作为参数传递给TreeSet构造函数,该构造函数按日期对对象进行排序 在这两种情况下,您都不需要对列表进行预排序。
重要的提示:
TreeSet使用compareTo
来比较键。 因此,如果2个键具有相同的日期但名称不同,则应确保compare或compareTo方法返回非0值,否则将认为2个对象相等且仅插入一个。
编辑
代码看起来像这样(未测试+你应该处理空值):
Comparator<Metadata> comparator = new Comparator<Metadata>() {
@Override
public int compare(Metadata o1, Metadata o2) {
if (o1.sourceDate.equals(o2.sourceDate)) {
return o1.name.compareTo(o2.name);
} else {
return o1.sourceDate.compareTo(o2.sourceDate);
}
}
};
Set<Metadata> sortedWithoutDupes = new TreeSet<Metadata> (comparator);
sortedWithoutDupes.addAll(yourList);
TreeSet将自动对其元素进行排序,因此您不需要在添加到集合之前对列表进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.