使用多个对象对arrayList进行排序

时间:2016-01-11 14:29:21

标签: java object arraylist

我按如下方式列出了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;
    }

2 个答案:

答案 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());