2017-02-05 10 views
0

У меня есть список животных, где есть 3 типа ТИГР, СОБАКА, 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 затем АНТ, но и каждое животное имеет порядковый номер заказа

Так что, если у нас есть это:

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

Возможный дубликат [Как использовать Collections.sort() в JAVA? (Конкретная ситуация)] (http://stackoverflow.com/questions/16425127/how-to-use-collections-sort-in-java-specific-situation) –

+1

Вопрос не достаточно для Android, рассмотрите использование тега Java вместо –

ответ

1

Вы можете использовать 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(); 
    } 
} 

, а затем:

Collections.sort(animals, new AnimalCompare()); 

Обратите внимание, что это все не предполагающая никаких нулевых значений.

+1

Работал отлично –

0

Попробуйте определить компаратора с методом Collections.sort() или сделать класс животного реализацией интерфейса Comparable и переопределить метод compareTo (Животное), и вы должны быть хороши идти .

+0

Хорошие предложения, может быть, какой-то код поможет? –

 Смежные вопросы

  • Нет связанных вопросов^_^