2014-01-23 6 views
0

Здравствуйте Хотелось бы знать, как я могу разобраться в этом arrayListСортировка по алфавиту ArrayList

public class Librarian { 
    public static void main(String[] args){ 

     Library library = new Library(); 



     library.addBook(new FictionBook("The walk through the exam", "Andreas", 0)); 
     library.addBook(new FictionBook("The incredible Programmer", "John", 1)); 
     library.addBook(new FictionBook("The Calculator", "Pius", 1)); 
     library.addBook(new FictionBook("The gozzilla", "Henry", 1)); 
     library.addBook(new FictionBook("The game", "Pele", 0)); 
     library.addBook(new FictionBook("Racing on the moon", "Marco",0)); 
     library.addBook(new FictionBook("London Show", "William", 0)); 
     library.addBook(new FictionBook("Water fights", "Claudia", 1)); 
     library.addBook(new FictionBook("Monster and Dragons", "Woozer", 1)); 
     library.addBook(new FictionBook("Pencils and pins", "Xian", 0)); 

     for(FictionBook myFictionBook : library.library){ 
      System.out.println(myFictionBook.getAuthor()); 
     } 
    } 
+5

Сравнимый интерфейс ... –

+0

Внедрите интерфейс Comparable для вашего класса FictionBook, а затем используйте: Collection.sort (library); – HectorLector

+0

Либо пусть ваш класс FictionBook реализует интерфейс Comparable, либо предоставит пользовательский компаратор при использовании Collections.sort() –

ответ

0

Сортировка в Java выполняется путем реализации интерфейса Comparable, который в основном диктует, как вы сравниваете два объекта (т. Е. «Больше» и должны быть последними, а «меньше» и должны быть первыми). После этого Collections.sort должен заботиться обо всем остальном.

FictionBook Предполагается, что ваш класс имеет метод getTitle(), вы хотите сделать что-то вроде этого:

public class FictionBook implements Comparable<FictionBook> { 
    // snipped... 

    @Override 
    public int compareTo(FictionBook other) { 
     return getTitle().compareTo(other.getTitle()); 
    } 
} 

Тогда вы могли бы просто использовать Collections.sort(library).

Альтернативный подход состоит в том, чтобы решить, что у FictionBook s нет естественного упорядочения (то есть они не Comparable), а другой класс обрабатывает порядок. Это может быть сделано путем внедрения Comparator аналогичным образом:

public class FictionBookComparator implements Comparator<FictionBook> { 
    @Override 
    public int compare(FictionBook o1, FictionBook o2) { 
     return o1.getTitle().compareTo(o2.getTitle()); 
    } 
} 

Теперь вы можете использовать этот Comparator при сортировке вашей library: Collections.sort(library, new FictionBookComparator()).

0

Реализовать сравнимую для FictionBook, а затем просто сортировать library.library список.

2

Как уже упоминалось, вы можете реализовать интерфейс Comparable в своем классе java. Лучшей альтернативой могло бы быть использование внешнего Comparator.

Comparator<FictionBook> comparator = new Comparator<FictionBook>() { 

    public int compare(FictionBook a, FictionBook b) { 
     return a.title.compareTo(b.title); 
    } 

}

Если вы теперь хотите отсортировать вам книги в зависимости от года выпуска, то вы только должны реализовать другой компаратор и использовать только новый. Или вы пишете DecoratorComparator, который инвертирует повтор внутреннего результата.

Обратные сортировщик:

Comparator<FictionBook> inverse = new Comparator<FictionBook>() { 

    public int compare(FictionBook a, FictionBook b) { 
     return comparator.compare(a, b) * -1; 
    } 

}

Фактическая сортировка также выполняется с Collections.sort (список, компаратор). Если вы хотите, чтобы гибкое решение для сортировки использовало компаратор.

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