Hallo zusammen,
habe hier ein TreeSet mit Objekten die nach unterschiedlichen Attributen sortiert werden können. Nach welchem Attribut die Objekte sortiert werden soll zur Laufzeit verändern werden können.
Ich benutze dazu momentan einen Comparator, dessen compare(..) Methode die übergebenen Objekte unterschiedlich vergleicht.
Ein Ausschnitt vom Code:
Mein Problem ist nun, dass ein TreeSet seine Objekte nicht neusortiert, wenn irgendein Attribut im Comparator geändert wird. Und eine Methode TreeSet.resort() gibt es auch nicht.
Wie implementiere ich es nun am besten/schönsten, dass beim Ändern des "Sortierkriteriums" das TreeSet neu sortiert wird?
Ich könnte nach dem Ändern ein Element hinzufügen und wieder löschen, aber das ist nicht besonders sauber.
Das Konzept des Umsortierens ist ja nichts ungewöhnliches, da müsste es doch eine Art "Standartlösung" geben?
habe hier ein TreeSet mit Objekten die nach unterschiedlichen Attributen sortiert werden können. Nach welchem Attribut die Objekte sortiert werden soll zur Laufzeit verändern werden können.
Ich benutze dazu momentan einen Comparator, dessen compare(..) Methode die übergebenen Objekte unterschiedlich vergleicht.
Ein Ausschnitt vom Code:
Java:
class EntryComparator implements Comparator<Entry> {
public enum SortType {NAME, COUNT, DATE};
public enum Order {ASCENDING, DESCENDING};
private SortType sortType;
private Order order;
public EntryComparator() {
sortType = SortType.NAME;
order = Order.ASCENDING;
}
public void setSortType(SortType s) {
sortType = s;
}
public void setOrder(Order o) {
order = o;
}
public int compare(Entry o1, Entry o2) {
int ret = 0;
switch (sortType) {
case NAME:
ret = o1.getName()compareToIgnoreCase(o2.getName());
case COUNT:
Integer c1 = new Integer(o1.getCount());
Integer c2 = new Integer(o2.getCount());
ret = c1.compareTo(c2);
break;
case DATE:
ret = o1.getDate().compareTo(o2.getDate());
break;
default:
break;
}
if (order == Order.DESCENDING) {
ret *= -1;
}
return ret;
}
}
Mein Problem ist nun, dass ein TreeSet seine Objekte nicht neusortiert, wenn irgendein Attribut im Comparator geändert wird. Und eine Methode TreeSet.resort() gibt es auch nicht.
Wie implementiere ich es nun am besten/schönsten, dass beim Ändern des "Sortierkriteriums" das TreeSet neu sortiert wird?
Ich könnte nach dem Ändern ein Element hinzufügen und wieder löschen, aber das ist nicht besonders sauber.
Das Konzept des Umsortierens ist ja nichts ungewöhnliches, da müsste es doch eine Art "Standartlösung" geben?