使用两个不同字段对列表进行排序的最佳方法 [英] Best way to sort a list using two different fields
问题描述
我有一个动物列表,其中有3种类型的老虎,狗,蚂蚁,它们也有一个字段,用于确定需要排序的顺序
I have a list of Animals where there are 3 types TIGER, DOG, ANT, they also have a field that determines the order that needs to be sorted
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");
}
需要对列表进行排序,先放置TIGER,然后放置DOG,然后再放置ANT,而且每个动物都有一个顺序的订单号
The list needs to be sorted by putting the TIGER first then DOG then ANT, but also each Animal has a sequential order number
因此,如果我们有这样的话:
So if we have this:
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));
排序后,应该是这样
new Animal(TIGER, 1);
new Animal(TIGER, 2);
new Animal(TIGER, 3);
new Animal(DOG, 1);
new Animal(DOG, 2);
new Animal(DOG, 3);
new Animal(DOG, 4);
new Animal(DOG, 5);
new Animal(ANT, 1);
new Animal(ANT, 2);
new Animal(ANT, 3);
对它进行排序的最佳方法是什么?我正在使用Android,因此应该是Java 7。
What is the best way to sort it ?? I am using Android so it should be Java 7.
推荐答案
您可以使用 Collections.sort
,但首先需要定义一个比较器。在您的情况下,可能会这样:
You can use Collections.sort
, but first you need to define a comparator. In your case something like this may work:
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());
请注意,这些都是假设没有空值。
Note that this is all assuming no null values.
这篇关于使用两个不同字段对列表进行排序的最佳方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!