我有一个动物列表,其中有3种类型TIGER,DOG,ANT,它们还有一个字段,用于确定需要排序的顺序
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,然后每个Animal都有一个连续的订单号
所以,如果我们有这个:
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。
答案 0 :(得分:1)
您可以使用llm.findLastVisibleItemPosition()
,但首先需要定义比较器。在你的情况下,这样的事情可能有用:
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();
}
}
请注意,这是假设没有空值。
答案 1 :(得分:0)
尝试为Collections.sort()方法定义一个比较器,或者让动物类实现Comparable接口并覆盖compareTo(动物动物)方法,你应该好好去。