[英]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.