Android 使用两个不同字段对列表进行排序的最佳方法
我有一个动物列表,其中有3种类型:老虎、狗、蚂蚁,它们还有一个字段,用于确定需要排序的顺序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;
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());