我有一个包含不同类型对象的对象列表,但是所有对象中都有一个属性。 list包含Field类,Button Class,Page class等对象,但是所有属性都是共同的,即“sequence_no”& 我想在“sequence_no”的基础上对这个列表进行排序。
答案 0 :(得分:7)
我建议创建一个界面,例如" Sequenceable
"使用方法getSequenceNo()
。
public interface Sequenceable {
int getSequenceNo();
}
您的Field
,Button
,Page
类应实现此界面,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)
最好和最简洁的方法是让您的类实现接口或扩展公共基类。
其他方式可以(我不喜欢性能,可读性和清洁度),创建一个自定义比较器,使用反射来检查 输入然后比较属性