排序对象列表

时间:2012-02-13 11:58:27

标签: java

我有一个对象列表:

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

我想在字符串字段errorCode上按字母顺序排序。

我知道我必须使用

Collections.sort(list,comparator) 

并编写自定义Comparator:

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

我已经看到了如何为一维列表执行此操作的示例,但我无法确定如何开始查找对象列表。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分: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 :(得分:0)

在比较器中,您必须解释如何对特定对象进行排序。

if (obj.att1 < obj2.att2)
   ...
你知道了吗?

答案 2 :(得分:0)

对列表进行排序时,排序实现将使用比较器来比较各个对象的paisr。那么你的比较器需要做的是为一对给定的WorkFlowErrors决定哪个是“第一个”。

从你所说的这听起来就像从每个人那里得到错误代码并做一个字符串compairson。

答案 3 :(得分:0)

如果您总是希望以这种方式比较WorkflowError对象,最简单的方法是在Comparable<WorkflowError>本身上实现WorkflowError

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

假设errorCode实现了Comparable。