0

我有一个基类,其中包含以下行来对我的对象 ArrayList 进行排序:

Collections.sort(objects, SortObjectList);

它还包括以下类定义来定义排序:

private class SortObjectList implements Comparator<T>
{
    public int compare(T lhs, T rhs) 
    {
        return lhs.name.compareToIgnoreCase(rhs.name);
    }
}

为了允许派生类使用不同的标准进行排序,我实现了以下内容:

Collections.sort(objects, getSortObjectClass());

public Comparator<T> getSortObjectClass() {
    return new SortObjectList();
}
private class SortObjectList implements Comparator<T>
{
    public int compare(T lhs, T rhs) 
    {
        return lhs.name.compareToIgnoreCase(rhs.name);
    }
}

然后我重写派生类中的排序,如下所示:

@Override
public Comparator<MyDataClass> getSortObjectClass() {
    return new SortObjectList();
}
private class SortObjectList implements Comparator<MyDataClass>
{
    public int compare(MyDataClasslhs, MyDataClassrhs) 
    {
        return lhs.seqNo - rhs.seqNo;
    }
}

哪个命令按 seqNo 而不是名称。

它有效,但似乎有点笨拙。有谁知道更优雅的解决方案?

4

1 回答 1

4

好吧,您可以使用匿名内部类使其更紧凑:

@Override
public Comparator<MyDataClass> getSortObjectClass() {
    return new Comparator<MyDataClass> {
        @Override
        public int compare(MyDataClass lhs, MyDataClass rhs)  {
            return lhs.seqNo - rhs.seqNo;
        }
    };
}

但这与 Java 中的一样紧凑。

(请注意,顺便说一下,上面的比较会在溢出时给出错误的结果。)

于 2012-08-01T07:14:45.513 回答