我有一个基类,其中包含以下行来排序我的对象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而不是名称来命令。
它有效,但看起来有点笨重。有谁知道更优雅的解决方案?
答案 0 :(得分:4)
你可以使用匿名内部类使稍微更紧凑:
@Override
public Comparator<MyDataClass> getSortObjectClass() {
return new Comparator<MyDataClass> {
@Override
public int compare(MyDataClass lhs, MyDataClass rhs) {
return lhs.seqNo - rhs.seqNo;
}
};
}
但这与Java中的一样紧凑。
(请注意,顺便说一句,上面的比较会在溢出时给出错误的结果。)