2012-02-13 106 views
0

我有對象的列表:排序對象列表

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

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

我知道我必須使用

Collections.sort(list,comparator) 

,並編寫自定義的比較:

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

我已經看到了如何做到這一點的一名維列表的例子,但我不能工作了解如何開始查看對象列表。

任何幫助,將不勝感激。

+0

'//比較邏輯'在哪裏? – adarshr 2012-02-13 12:01:13

回答

9

您需要實施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()); 
    } 
}); 
+1

完美地工作,我不知道compareTo()會如何表現字符串。非常感謝。 – Fraser 2012-02-13 12:34:30

+0

+1 - 也幫助我了!謝謝! – 2012-05-25 18:57:54

0

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

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

你明白嗎?

0

排序列表時,排序實現將使用比較器來比較單個對象的paisr。因此,您的比較器需要做的是爲給定的一對WorkFlowErrors決定哪個「首先」。

從你說的這聽起來像剛從每個人得到的錯誤代碼,並做一個字符串compairson。

0

如果你永遠想要以這種方式比較WorkflowError對象,最簡單的方法是在WorkflowError本身上實現Comparable<WorkflowError>

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

這是假設errorCode實現了Comparable。