2016-01-11 5 views
4

Я сделал список Animal с следующим образом:Отсортировать ArrayList с несколькими объектами

 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)); 

Я хочу, чтобы отсортировать мой список животных в ArrayList их ID. Из того, что я видел, я должен использовать компаратор.

Это то, что я создал до сих пор ...

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; 
    } 
+3

И дело? – user3707125

+0

Интерфейс 'Comperator' фактически сообщает вам подпись метода, который вам нужно реализовать. Если у вас нет метода с этой сигнатурой внутри вашего класса, тогда он не будет компилироваться, и я думаю, что это так. Ну и вы не можете называть свои переменные типа «animals.get (0)» – SomeJavaGuy

+0

Этот вопрос задавался и отвечал несколько раз. Это повторяющийся вопрос. – OPK

ответ

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. Затем вы сравниваете два идентификатора, вам не нужно его вычитать. Просто используйте тот же метод из класса 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

исправлено ... спасибо –

+0

@ user3707125 вы правы, исправлены –

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()); 
Смежные вопросы