Android 使用两个不同字段对列表进行排序的最佳方法

Android 使用两个不同字段对列表进行排序的最佳方法,android,algorithm,performance,sorting,collections,Android,Algorithm,Performance,Sorting,Collections,我有一个动物列表,其中有3种类型:老虎、狗、蚂蚁,它们还有一个字段,用于确定需要排序的顺序 public class Animal { private final AnimalType animalType; private final int orderNumber; public Animal(AnimalType animalType, int orderNumber) { this.animalType = animalType;

我有一个动物列表,其中有3种类型:老虎、狗、蚂蚁,它们还有一个字段,用于确定需要排序的顺序

public class Animal {
    private final AnimalType animalType;

    private final int orderNumber;

    public Animal(AnimalType animalType, int orderNumber) {
        this.animalType = animalType;
        this.orderNumber = orderNumber;
    }

    public int getOrderNumber() {
        return orderNumber;
    }

    public AnimalType getAnimalType() {
        return animalType;
        }
    }


    public enum AnimalType {
        TIGER("tiger"),
        DOG("dog"),
        ANT("ant");
    }
这个列表需要按照老虎、狗、蚂蚁的顺序排列,但每种动物都有一个顺序号

因此,如果我们有:

List<Animal> animals = new ArrayList<>();

animals.add(new Animal(TIGER, 2));
animals.add(new Animal(DOG, 5));
animals.add(new Animal(ANT, 1));
animals.add(new Animal(ANT, 3));
animals.add(new Animal(TIGER, 3));
animals.add(new Animal(DOG, 4));
animals.add(new Animal(TIGER, 1));
animals.add(new Animal(DOG, 2));
animals.add(new Animal(DOG, 1));
animals.add(new Animal(ANT, 2));
animals.add(new Animal(DOG, 3));

排序的最佳方法是什么??我使用的是Android,所以应该是Java 7。

尝试为Collections.sort()方法定义一个比较器,或者让animal类实现Comparable接口并重写compareTo(animal animal)方法,您应该可以使用。

您可以使用
Collections.sort
,但首先需要定义一个比较器。在您的情况下,类似的方法可能会起作用:

class AnimalCompare implements Comparator<Animal> {
    @Override
    public int compare(Animal o1, Animal o2) {
        if (o1.getAnimalType().ordinal() < o2.getAnimalType().ordinal()){
            return -1;
        } else if (o1.getAnimalType().ordinal() > o2.getAnimalType().ordinal()) {
            return 1;
        }
        return o1.getOrderNumber() - o2.getOrderNumber();
    }
}

请注意,这都是假设没有空值。

问题的可能重复项不够特定于Android,请考虑改用Java标记
class AnimalCompare implements Comparator<Animal> {
    @Override
    public int compare(Animal o1, Animal o2) {
        if (o1.getAnimalType().ordinal() < o2.getAnimalType().ordinal()){
            return -1;
        } else if (o1.getAnimalType().ordinal() > o2.getAnimalType().ordinal()) {
            return 1;
        }
        return o1.getOrderNumber() - o2.getOrderNumber();
    }
}
Collections.sort(animals, new AnimalCompare());