2017-05-11 6 views
1

ich ein Autor Klasse wie folgt geschrieben haben: speichernListe sortieren mein Nachname

public final class Author implements Comparator<Author> { 

    private final String authorFirstname; 
    private final String authorLastname; 

    public Author(String authorFirstname, String authorLastname){ 
     this.authorFirstname = authorFirstname; 
     this.authorLastname = authorLastname; 
    } 

    //Left out equals/HashCode 
    @Override 
    public int compare(Author o1, Author o2) { 
     // TODO Auto-generated method stub 
     return this.authorLastname.compareTo(o2.getLastname()); 
    } 

} 

Ich möchte, dass sie in einer List Sammlung und sortieren sie nach dem Nachnamen. Ich habe Java 8 comparable gelesen, diese zwei Beispiele (1, 2). Habe ich es richtig umgesetzt?

+2

Im Allgemeinen wird eine 'compareTo' Methode für ein Objekt sollte der kanonische und gebräuchlichste Vergleich für das Objekt sein. Eine bessere Option ist die Verwendung von 'Comparator.comparing (Author :: getLastname)', wenn Sie einen spezifischeren Vergleicher benötigen. – 4castle

+0

Angenommen, Sie verweisen diese [post] (https://www.mkyong.com/java8/java-8-lambda-comparator-example/) auf den Komparator java 8. –

+0

Um dem Punkt von @ 4castle hinzuzufügen, wird empfohlen, dass vergleichbare Klassen mit * übereinstimmen, was bedeutet, dass "a.compareTo (b) == 0" immer gleich "a.equals (b)" sein sollte. Ich vermute, das ist hier nicht der Fall. – shmosel

Antwort

0

Ich denke, dass es eine gute Implementierung ist. zweite Weg ist:

List<Author> list = new ArrayList<>(); 
Collections.sort(list, new Comparator<Author>() { 
    @Override 
    public int compare(Author a1, Author a2) { 
     return a1.getLastName().compareTo(a2.getLastName()); 
    } 
}); 

und verwenden Sie diese in Ort, an dem Sie diese Liste sortieren möchten.

@Update, dritte Option:

public static class AuthorComparator implements Comparator<Author> { 
    @Override 
    public int compare(Author a1, Author a2) { 
     return a1.getLastName().compareTo(a2.getLastName()); 
    } 
} 

Sie haben diese Klasse in Ihrem Autor zu setzen. Und wo Sie sortieren mögen:

List<Author> list = new ArrayList<>(); 
Collections.sort(list, new Author.AuthorComparator()); 
+0

Muss ich hier die anonyme Klasse verwenden oder gibt es eine Alternative? –

+0

Sie können statische innere Klasse verwenden. – Kutti

+0

Ich aktualisierte die Antwort. – Kutti

Verwandte Themen