如何对类的ArrayList进行排序

时间:2015-03-15 19:53:41

标签: 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 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;
}

1 个答案:

答案 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)