Java 如何对类的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

我试图对具有抽象类型的类的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;}
}
如果我有这些类的两个实例并将它们传递到
级别

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,没有充分注意示例中原语的使用。编辑答案以修复