# Sortieren Von Objekten Nach Attribut



## SBS (25. Mrz 2004)

Hallo @all

Bin neu hier  
Gefällt mir aber recht gut das Board, ich hoffe sehr, dass mir jemand bei meinem Javaproblem weiterhelfen kann.

Also für meinen Java I Schein an der Uni sitze ich gerade an einer Projektarbeit, ich entwerfe eine Software für eine Videothek, welche Filme und Kunden verwalten kann etc.

Ich bin auch schon relativ weit vorangekommen, meine Kunden (und auch meine Videos) werden, objectweise, in Dateien gespeichert, wenn ich sie in meiner GUI lade, erscheinen sie, nach einer bestimmten Formatierung, in meiner JList...

Ich möchte nun, z.b. die Filme nach Titel, die Kunden nach Nachnamen sortieren.

D.h. ich muss mir meine Objekte wieder in meinen Vector laden, und nun muss ich irgendwie über z.b. meine getName() Methode aus meinem Customer-Object eine Sortierung vornehmen...die getName() Methode liefert einen String zurück.

Leider weiß ich nicht wie ich das am geschicktesten mache, habe schon eine MEnge ausprobiert 
Vielleicht in ein Array (es gibt doch irgendeine automatische Sortierfunktion für arrays...wie hieß die noch gleich) und dann sortieren? Nur dann muss ich aus diesem Array meine Objekte, richtig sortiert, wieder zurück in den Vector und zurück in die Datei...

Vielleicht kann mir jemand weiter helfen! Habe leider nur noch bis nächste Woche zeit und noch einige kleine PRoblemchen am Hals.

PS: Ich bin es gewöhnt keine ganzen Quellcodes zu posten, finde das unschön, wenn jemand Code für eine Hilfestellung braucht, schicke ich ihn selbstversändlich per PN.

Grüße und Danke im Vorraus...


----------



## Beni (26. Mrz 2004)

_Arrays.sort_ heisst die Methode :wink: (im Package java.util). 

Aber mit _Collections _geht es einfacher: die Methode _Collections.sort_ kann mit einem _Vector _als Argument aufgerufen werden.
Die _Customer_-Klasse muss noch _Comparable _implementieren, oder du musst sonst ein _Comparator _schreiben, damit die _Customer _in eine Reihenfolge gebracht werden können.

Siehe API: hier

mfg Beni


----------



## bygones (26. Mrz 2004)

oder du kannst gleich eine sortierte Liste bzw. Map nehmen (TreeSet TreeMap).

Wenn deine Model klassen das Interface Comparable implementieren, sortieren die beiden deine Daten automatisch beim einfügen !


----------



## SBS (26. Mrz 2004)

Also Comparable implementiert meine Customer bereits.
Ich habe irgendwie noch Probleme damit dass "nur" nach einem bestimmten
Attribut aus meinen Objecten im Vector sortiert wird,
vielleicht hab ichs auch noch nicht ganz verstanden.
Denn wenn ich nach den Strings, die z.b. über getName() geliefert werden,
sortieren will, dann muss ich doch erstmal alle diese Strings 
irgendwo haben oder nicht? Quasi hatte ich sie bereits in ein Array schonmal 
ausgelagert und dort sortiert...was natürlich nicht sonderlich geschickt war,
denn was nützen mir sortierte Strings ohne die zugehörigen Objecte...

Tortzdem danke erstmal, ich versuchs nochmal...


----------



## bygones (26. Mrz 2004)

```
public class MeinObjekt implements Comparable {
private String name;

public MeinObjekt(String name) {
  this.name = name;
}

public String getName() {
return name;
}

public int compareTo(Object o) {
  if(this == o) return true;
  
  return name.compareTo(((MeinObjekt)o).getName());
}
```

Wenn du solche Objekte z.B. in ein TreeSet hinzufügst, werden sie automatisch nach dem String "name" sortiert. Und so kannst du das mit jedem Attirbut der Klasse machen.....


----------



## Tobias (26. Mrz 2004)

Das TreeSet sortiert nur einmal beim Erstellen (zumindest wenn man einen Comparator benutzt) und dann beim Einfügen nicht mehr - sogar das Kopieren in eine neue TreeSet führt *nicht* zum Neusortieren!
Vielleicht hat meine Testaufstellung irgendwo einen Fehler, aber ich fürchte, das ist ein Bug oder zumindest ein missinterpretiertes Feature...

mpG
Tobias


----------



## bygones (26. Mrz 2004)

```
TreeSet set = new TreeSet();
set.add("Meins");
set.add("Deins");
set.add("zuHause");
set.add("Ich will");
set.add("Aber");
System.out.println(set);
```
Ausgabe:

```
Aber, Deins, Ich will, Meins, zuHause]
```

Also sortiert es auch beim einfügen ?!


----------

