对不同类型对象的列表进行排序

时间:2015-09-18 07:38:01

标签: java

我有一个包含不同类型对象的对象列表,但是所有对象中都有一个属性。 list包含Field类,Button Class,Page class等对象,但是所有属性都是共同的,即“sequence_no”& 我想在“sequence_no”的基础上对这个列表进行排序。

4 个答案:

答案 0 :(得分:7)

我建议创建一个界面,例如" Sequenceable"使用方法getSequenceNo()

public interface Sequenceable {
    int getSequenceNo();
}

您的FieldButtonPage类应实现此界面,getSequenceNo()方法将返回您的sequence_no

然后,您可以实现自己的Comparator并使用此比较器进行排序。

例如,您的比较器将如下所示:

class MyComparator implements Comparator<Sequenceable> {

    @Override
    public int compare(Sequenceable o1, Sequenceable o2) {
        return o2.getSequenceNo() - o1.getSequenceNo();
    }
}

然后你可以用:

排序
Collections.sort(list, new MyComparator());

答案 1 :(得分:0)

如果您要排序的几个类(字段,按钮,页面...),您可以执行一个继承自Comparator<Object>的类并使用java.lang.Object.getClass()casting在一个开关clasusule。

类似的东西:

public class MyComparator implements Comparator<Object>{
        @Override
        public int compare(Object o1, Object o2) {
            int o1prop,o2prop;
            switch (o1.getClass().toString()) {
            case "java.Button":
                ((Button)o1prop).getSequence_no();
                break;

            default:
                break;
            }

            switch (o2.getClass().toString()) {
            case "java.Field":
                ((Field)o1prop).getSequence_no();
                break;

            default:
                break;
            }

            return o1prop-o2prop;
        }

然后使用:

Collections.sort(list, new MyComparator());

答案 2 :(得分:0)

所有对象都应该由某个相同的超类来释放或继承,然后编译器不会要求您显式更改这些对象。

答案 3 :(得分:0)

最好和最简洁的方法是让您的类实现接口或扩展公共基类。

其他方式可以(我不喜欢性能,可读性和清洁度),创建一个自定义比较器,使用反射来检查  输入然后比较属性