簡體   English   中英

排序和重復數據刪除java集合

[英]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);

如果日期是對象中的字段,您可以:

  • 讓你的對象實現Comparable並根據日期比較對象
  • 或者將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM