2017-02-08 1 views
-1

Ich weiß, dass wir TreeSet verwenden können, um Strings und Zahlen in einer natürlichen Reihenfolge zu sortieren. Was ist, wenn es eine Reihe von Objekten gibt?Objekte in Set in Java sortieren?

Zum Beispiel:

I have a Person class 
{ 
    private String firstName; 
    private String lastName; 
    private int age; 

} 

Set Person = new TreeSet();

Ich mag Person von Vornamen sortierte, wenn ich Person initialisieren.

+3

Werfen Sie einen Blick auf "Comparable" und Oracles [Tutorials für Objektanordnungen] (https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html). –

+0

Ich denke, dieser Beitrag kann Ihnen helfen http://stackoverflow.com/questions/4132367/sorting-objects-within-a-set-by-a-string-value-that-all-objects-enthalten –

+0

Schauen Sie sich die meine antworten Sie [hier] (http://stackoverflow.com/a/42123307/3845396) für ähnliche Fragen. – HPatel

Antwort

1

Sowohl Comparable und Comparator Arbeit für Sie, aber ich schlage vor Comparator, weil es nicht Sie Person Klasse erfordert ändern, brauchen Sie nur die eine Implementierung der Klasse schreiben Attribut basierend auf der Sortierung, daher Comparator ist viel mehr flexiable:

import java.util.Comparator; 
public class FirstNameComparator implements Comparator<Person> { 

    @Override 
    public int compare(Person o1, Person o2) { 
     String name1 = o1.getFirstName(); 
     String name2 = o2.getFirstName(); 
     return name1.compareTo(name2); 
    } 

} 

//instantiate TreeSet instance with FirstNameComparator 
Set<Person> ts = new TreeSet<>(new FirstNameComparator()); 
+0

'Collections.sort' nimmt eine' List' auf, so dass dies nicht mit 'Set' funktioniert. Aber da OP 'TreeSet' verwendet, gibt es einen [Konstruktor] (https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#TreeSet (java.util.Comparator)).) das akzeptiert einen 'Comparator', der hier funktionieren würde. –

+0

* Ich empfehle 'Comparator', weil es nicht erfordert, dass Sie die' Person' Klasse * ändern. Es ist nichts falsch daran, eine Klasse zu modifizieren, die eine natürliche Ordnung haben sollte. Ein viel stärkeres Argument ist, dass eine Klasse wie "Person" wahrscheinlich * keine einzige natürliche Ordnung hat. – shmosel

+0

@MickMnemonic danke Mick. Meine Schuld, ich dachte, es wäre iterabel geworden. – haifzhan