2014-01-23 4 views
0

안녕하세요 나는이 arrayListArrayList에 정렬하는 순으로

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

FictionBook 클래스의 Comparable 인터페이스를 구현 한 다음 다음을 사용하십시오. 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이 자연 순서 (즉, Comparable이 아님)가 있지만 다른 클래스가 순서를 처리한다고 결정하는 것입니다. 이것은 비슷한 방식으로 Comparator를 구현하여 수행 할 수 있습니다

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

을 지금, 당신의 library 정렬 할 때이 Comparator를 사용할 수 있습니다 Collections.sort(library, new FictionBookComparator())를.

0

FictionBook에 대한 필적을 구현하고 그저 library.library 목록 정렬 할 수있는 방법을 알고 싶습니다.

2

다른 언급처럼 java 클래스에서 Comparable Interface를 구현할 수 있습니다. 더 나은 대안은 외부 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 (목록, 비교기)로 이루어진다. 유연한 정렬 솔루션을 원하면 Comparator를 사용하십시오.

관련 문제