Hallo
ich will ein Set sortieren nach id in meiner Klasse.
MeineKlasse hat die Felder id, name, datum, xy, yz und soll im Set nach id sortiert werden.
Wie mache ich das?
Hallo
ich will ein Set sortieren nach id in meiner Klasse.
MeineKlasse hat die Felder id, name, datum, xy, yz und soll im Set nach id sortiert werden.
Wie mache ich das?
Hallo Benjamin
Deine „MeineKlasse“ muss das Interface Comparable implementieren. Eine gute Anleitung und Erklärungen dazu findest du hier:
http://www.iks.hs-merseburg.de/~uschroet/Literatur/J…
Hoffe, dass dir das weiter hilft.
Grüsse
Marcel
Ein Set hat keine Ordnung. Du musst es in ein SortedSet oder z.B. eine Liste umwandeln. Und es dann sortieren. Für die Ordnung siehe http://download.oracle.com/javase/6/docs/api/index.h….
Oder natürlich
http://www.google.de/#hl=de&source=hp&q=java+set+sor…
Hallo,
Implementierungen des Interfaces können nicht sortiert werden. Zum Sortieren eine ArrayList aus dem Set erstellen und dann mit Collections.sort(liste) sortieren. Alternativ kannst Du eine Implementierung von Comparator mit in die Sort-Methode geben, falls die natürliche Sortierung nicht ausreicht. Pseudocode:
List liste = new ArrayList(setListe);
Collections.sort(liste);
Gruß,
Rudolf
Hallo Benjamin,
es gibt mehrere Möglichkeiten dies zu tun. Am einfachsten ist, aus dem Set mittels der Methode toArray ein Array zu machen und anschließend das Array mittels Arrays.sort() zu sortieren. Die Information, dass die Klassen nach dem Feld id sortiert werden sollen, kann man mittels einer der folgenden beiden Lösungen tun:
1. Die Klasse MeineKlasse um den Typ Comparable erweitern und die Methode public int compareTo(java.lang.Object obj) implementieren. Die Klasse könnte dann etwa so aussehen:
public class MeineKlasse implements Comparable {
private long id;
public MeineKlasse(long id) {
this.id = id;
}
@Override
public int compareTo(MeineKlasse meineKlasse) {
return Long.valueOf(id).compareTo(Long.valueOf(meineKlasse.id));
}
}
So kann die Klasse dann sortiert werden:
Set meineKlassen = new HashSet();
meineKlassen.add(new MeineKlasse(3));
meineKlassen.add(new MeineKlasse(1));
meineKlassen.add(new MeineKlasse(4));
meineKlassen.add(new MeineKlasse(5));
meineKlassen.add(new MeineKlasse(2));
MeineKlasse[] meineKlassenArray = new MeineKlasse[meineKlassen.size()];
meineKlassen.toArray(meineKlassenArray);
Arrays.sort(meineKlassenArray);
for (MeineKlasse meineKlasse : meineKlassenArray) {
System.out.println(meineKlasse);
}
Für eine sinnvolle Ausgabe durch System.out.println kannst Du in Deiner Klasse die Methode toString() z.B. so überschreiben:
@Override
public String toString() {
return String.valueOf(id);
}
2. Verwendung einer weiteren Klasse vom Typ Comparator zum Sortieren
Die Implementierung könnte etwa so aussehen:
public class MeineKlasseComparator implements Comparator {
@Override
public int compare(MeineKlasse meineKlasse1, MeineKlasse meineKlasse2) {
return Long.valueOf(meineKlasse1.getId()).compareTo(meineKlasse2.getId());
}
}
So kann die Klasse dann sortiert werden:
Set meineKlassen = new HashSet();
meineKlassen.add(new MeineKlasse(3));
meineKlassen.add(new MeineKlasse(1));
meineKlassen.add(new MeineKlasse(4));
meineKlassen.add(new MeineKlasse(5));
meineKlassen.add(new MeineKlasse(2));
MeineKlasse[] meineKlassenArray = new MeineKlasse[meineKlassen.size()];
meineKlassen.toArray(meineKlassenArray);
MeineKlasseComparator meineKlassenComparator = new MeineKlasseComparator();
Arrays.sort(meineKlassenArray, meineKlassenComparator);
for (MeineKlasse meineKlasse : meineKlassenArray) {
System.out.println(meineKlasse);
}