簡體   English   中英

對象排序列表

[英]Sorting list of objects

我有一個對象列表:

List<WorkflowError> workflowErrors = new List<WorkflowError>();

我想在其中按字母順序對字符串字段errorCode進行排序。

我知道我要用

Collections.sort(list,comparator) 

並編寫一個自定義比較器:

public class SortByErrorComparator implements Comparator<WorkflowError>
{
    // Comparator logic    
    return 0;
}

我已經看到了如何針對一維列表執行此操作的示例,但是我無法弄清楚如何開始創建對象列表。

任何幫助,將不勝感激。

您需要實現compare方法。

public class SortByErrorComparator implements Comparator<WorkflowError> {
    public int compare(WorkflowError obj1, WorkflowError obj2) {
        return obj1.getErrorCode().compareTo(obj2.getErrorCode());
    }
}

然后,您可以簡單地執行以下操作:

Collections.sort(list, new SortByErrorComparator()) ;

在Java世界中,通常我們使用匿名內部類按以下方式內聯:

Collections.sort(list, new Comparator<WorkflowError>() {
    public int compare(WorkflowError obj1, WorkflowError obj2) {
        return obj1.getErrorCode().compareTo(obj2.getErrorCode());
    }
});

在比較器中,您必須解釋如何對特定對象進行排序。

if (obj.att1 < obj2.att2)
   ...

你懂嗎?

對列表進行排序時,排序實現將使用您的比較器來比較各個對象的對象。 因此,您的比較器需要做的是針對給定的一對WorkFlowErrors(首先)進行決策。

從您所說的來看,這聽起來像只是從每個錯誤代碼獲取錯誤代碼並進行字符串比較。

如果您始終希望以這種方式比較WorkflowError對象,最簡單的方法是在WorkflowError本身上實現Comparable<WorkflowError>

public int compareTo(WorkflowError that) {
    return this.getErrorCode().compareTo(that.getErrorCode());
}

假設errorCode實現了Comparable。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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