Java 如何对类的ArrayList排序
我试图对具有抽象类型的类的arrayList进行排序 这是我的界面Java 如何对类的ArrayList排序,java,sorting,arraylist,Java,Sorting,Arraylist,我试图对具有抽象类型的类的arrayList进行排序 这是我的界面 public interface iSomeInterface { public int level(); } 该接口有两种实现,它们的实现级别不同 public class LevelOne implements iSomeInterface { @Override public int level() {return 1;} } public class LevelTwo implements i
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;}
}
如果我有这些类的两个实例并将它们传递到级别
类
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);
ArrayList someInterfaces=new ArrayList();
添加(新的LevelOne());
添加(新的LevelTwo());
添加(新的LevelOne());
添加(新的LevelThree());
添加(新的LevelOne());
级别=新级别(某些接口);
如何根据级别值对这些分类进行排序
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;
}
}
公共类级别{
私有ArrayList接口;
公共级别(ArrayList接口){
this.someInterfaces=someInterfaces;
}
公共ArrayList排序(){
//一些用于排序实例的代码
返回一些接口;
}
}
答复:
感谢您的帮助,最后的答案是:
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;
}
公共类someComparator实现Comparator{
@凌驾
公共整数比较(首先是iSomeInterface,其次是iSomeInterface){
return first.level()如果您使用的是Java8,那么它是最简单的解决方案
public ArrayList<iSomeInterface> sorting(){
Collections.sort(someInterfaces, (iSomeInterface i1, iSomeInterface i2) -> i1.getLevel() - i2.getLevel());
return someInterfaces;
}
public ArrayList排序(){
Collections.sort(someInterface,(iSomeInterface i1,iSomeInterface i2)->i1.getLevel()-i2.getLevel());
返回一些接口;
}
如果你在之前的工作中,你可以实现你自己的比较器…用一个匿名的内部类来做一个1-liner
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;
}
public ArrayList排序(){
Collections.sort(接口,新的Comparator(){
@凌驾
公共整数比较(iSomeInterface i1、iSomeInterface i2){
返回i1.getLevel()-i2.getLevel();
}
});
返回接口;
}
我假设您想要修改您的成员变量,但是您总是可以首先复制您的列表
(注意集合是java.util.Collections)看看Comparator。这里的堆栈溢出讨论感谢您的指导,示例是一个具体的类,我有点困惑如何将其扩展到多个类Comparator可以在公共接口iSomeInterface
上工作,就像ComparatorBank一样,我遇到了错误无法解决该方法compareTo
由于方法是int-level()
,compare()
实现应该只为i1.level()-i2.level();
oops,没有充分注意示例中原语的使用。编辑答案以修复