Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich bin relativ neu in der Java-Programmierung und habe ein Problem:
Ich habe einen Vector gefüllt mit DatenObjekten.
Jedes DatenObjekt enthält mehrere Daten diese wären z.B.: Konto , Kategorie usw.
Nun möchte ich die DatenObjekte in dem Vector sortieren.
Also nach Konto und nachträglich nach Kategorie.
Das Problem hierbei ist es, dass Ich nicht nach ID´s oder dergleichen sortieren kann. Ich würde gerne mein Sort extra angeben.
Dies rührt daher, dass ich in Konto nur 6 verschiedene Konten stehen habe und in Kategorie auch nur 6 Kategorien.
Ein Konto, dass mit W anfängt soll als erstes auftauchen danach das K-Konto dann das A-.... usw. Kann ich diese Reihenfolge irgendwie beeinflussen? bzw wie würde die sortierung überhaupt aussehen?
Also, dass ich alle Datenobjekte mit Konto W-.. als erstes nehme dann Kategorie 1, 2, 3, 4 (auch in einer bestimmten Reihenfolge, ohne ID´s)
Ich hoffe ich habe mich verständlich ausgedrück und Ihr könnt mir helfen.
Im Komperator würd ich dann zwei HashMaps definierten.
Eine für die Kategorien und eine für die Kontos.
zb bei den Kategorien ist die Kategorie der key und ein wert für die order ist der Wert.
Java:
import java.util.Comparator;
import java.util.HashMap;
public class KontoComparator implements Comparator<Konto> {
HashMap<String, Integer> sortingKonto = new HashMap<String, Integer>();
public KontoComparator(){
sortingKonto.put("W", 1); //W als erster
sortingKonto.put("A", 2); //A als zweiter
sortingKonto.put("K", 3); //K als dritter
}
@Override
public int compare(Konto o1, Konto o2) {
int sort1 = getSortingForKonto(o1.getKonto());
int sort2 = getSortingForKonto(o2.getKonto());
if(sort1<sort2){
return -1;
}else if(sort1>sort2){
return 1;
}else{
//hier je´tzt noch nach Kategorie sortieren...
return 0;
}
}
//das geht sicher eleganter..
public int getSortingForKonto(String str){
char c = str.charAt(0);
Integer sorting = sortingKonto.get(Character.toString(c));
if(sorting==null)
return 99;
return sorting.intValue();
}
}
Wenn es keine Duplikate geben soll, und die Klasse schon Comparable implementiert, wäre auch ein TreeSet möglich, denn da ist immer alles automatisch sortiert.