我正在尝试对具有抽象类型的类的arrayList进行排序。
这是我的界面
public interface iSomeInterface {
public int level();
}
这个接口的实现有几个,它们的级别实现是不同的。
public class LevelOne implements iSomeInterface {
@Override
public int level() {return 1;}
}
public class LevelTwo implements iSomeInterface {
@Override
public int level() {return 2;}
}
public class LevelThree implements iSomeInterface {
@Override
public int level() {return 3;}
}
如果我有几个这些类的实例并将它们传递给Levels
类
ArrayList<iSomeInterface> someInterfaces = new ArrayList<iSomeInterface>();
someInterfaces.add(new LevelOne());
someInterfaces.add(new LevelTwo());
someInterfaces.add(new LevelOne());
someInterfaces.add(new LevelThree());
someInterfaces.add(new LevelOne());
Levels levels = new Levels(someInterfaces);
如何根据等级值对这些类别进行排序。
public class Levels {
private ArrayList<iSomeInterface> someInterfaces;
public Levels(ArrayList<iSomeInterface> someInterfaces){
this.someInterfaces = someInterfaces;
}
public ArrayList<iSomeInterface> sorting(){
//some code to sorting instances
return someInterfaces;
}
}
答案: 感谢您的帮助,最终答案:
public class someComparator implements Comparator<iSomeInterface> {
@Override
public int compare(iSomeInterface first, iSomeInterface second) {
return first.level()<second.level()?-1:first.level()==second.level()?0:1;
}
}
public ArrayList<iSomeInterface> sorting(){
Collections.sort(someInterfaces,new someComparator());
return someInterfaces;
}
答案 0 :(得分:2)
如果您使用的是Java 8,那么这是最简单的解决方案。
public ArrayList<iSomeInterface> sorting(){
Collections.sort(someInterfaces, (iSomeInterface i1, iSomeInterface i2) -> i1.getLevel() - i2.getLevel());
return someInterfaces;
}
如果你之前正在做某事,你可以实现自己的比较器...用一个匿名的内部类来制作一个单行...
public ArrayList<iSomeInterface> sorting(){
Collections.sort(interfaces, new Comparator<iSomeInterface>() {
@Override
public int compare(iSomeInterface i1, iSomeInterface i2) {
return i1.getLevel() - i2.getLevel();
}
});
return interfaces;
}
我假设你想修改你的成员变量,但你总是可以先复制你的列表。
(注意集合是java.util.Collections)