繁体   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