我按如下方式列出了Animal
:
ArrayList<Animal> animals = new ArrayList<Animal>();
animals.add(new Animal(1, "animal1", 50, "10 Janvier 2016", "Noir", 4, true));
animals.add(new Animal(2, "animal2", 50, "10 Janvier 2016", "Noir", 4, true));
animals.add(new Animal(3, "animal3", 50, "10 Janvier 2016", "Noir", 4, true));
animals.add(new Animal(4, "animal4", 50, "10 Janvier 2016", "Noir", 4, true));
animals.add(new Animal(5, "animal5", 50, "10 Janvier 2016", "Noir", 4, true));
我想通过他们的ID在ArrayList
中对动物列表进行排序。从我所见,我必须使用比较器。
这是我到目前为止所创造的......
public class ComparatorAnimal implements Comparator<Animal> {
public int compare(Animal animals.get(0), Animal animals.get(1) {
return animals.get(0).idAnimal - animals.get(1).idAnimal;
}
答案 0 :(得分:9)
public class ComparatorAnimal implements Comparator<Animal> {
public int compare(Animal animals.get(0), Animal animals.get(1) {
return animals.get(0).idAnimal - animals.get(1).idAnimal;
}
方法签名错误:您没有比较两个Animal
列表,而是两个Animal
对象列表。
然后你比较两个id,你不需要减去它。只需使用Integer类中的相同方法。
像这样改变你的方法:
public class ComparatorAnimal implements Comparator<Animal> {
public int compare(Animal o1, Animal o2) {
return Integer.compare(o1.idAnimal, o2.idAnimal);
}
现在您必须使用已排序的集合(如TreeMap而不是ArrayList)或调用Collections.sort(yourList, yourComparator)
答案 1 :(得分:1)
更改
public int compare(Animal animals.get(0), Animal animals.get(1) {
return animals.get(0).idAnimal - animals.get(1).idAnimal;
}
到
public int compare(Animal animal1, Animal animal2 {
if(animal1.idAnimal > animal2.idAnimal)
return 1;
else if(animal1.idAnimal < animal2.idAnimal)
return -1;
return 0;
}
&安培;然后使用
Collections.sort(animals, new ComparatorAnimal());