Comparator - Sortierkriterium

Dann müßtest Du immer zwischen den einzelnen "-" parsen und die maxmiale Länge der einzelnen Zahlenstring herausfinden und alle darauf umstellen. Ist über einen rekursiven Algorithmus schnell zu schreiben, aber bei größeren Datenmengen sehr Speicheraufwendig.
Aus Deinem Beispiel wird dann:
123465-1-1-1-0
123465-1-1-2-0
123465-2-1-2-1

bzw:

123465-1-2-4
123465-12-2-31
123456-1-12-3-4

wird zu:
123465-01-02-04-0
123465-12-02-31-0
123465-01-12-03-4
 
Du liebe Güte... jetzt wird´s kompliziert für mich. Wie soll ich denn hier rangehen - und dann auch noch rekursiv (Rekursion habe ich aber schonmal gemacht)?!
Ich habe jetzt im Moment keine Idee mehr bzw. mit brummt der Kopf... kannst mir nicht mal ne kleine Hilfe geben? :-(
 
So, ich hab´s jetzt endlich hinbekommen, dass die Sortierung wie gewünscht funktioniert. Ich habe dazu meinen Code vom Anfang des Post´s benutzt und lediglich mein i an geeigneter Stelle hochgezählt... Die Lösung lag die ganze Zeit vor meinen Augen und ich hab den Wald vor lauter Bäumen nicht gesehen! ;)

Code:
Comparator comparator = new Comparator() {
        public int compare(Object arg0, Object arg1) {
        	String name1 = (String) arg0;
        	String name2 = (String) arg1;
           
        	String str1 = name1.substring(0,name1.lastIndexOf("__"));
        	String str2 = name2.substring(0,name2.lastIndexOf("__"));
   
        	String[] werte1 = str1.split("-");
        	String[] werte2 = str2.split("-");

        	int i = 0;
        	while((i<werte1.length)&&(i<werte2.length)) {
        		int value1 = Integer.parseInt(werte1[i]);
        		int value2 = Integer.parseInt(werte2[i]);
             
        		if(value1>value2) {
        			return 1;
        		}else if(value1<value2) {
        			return -1;
        		} 
        		i++;
        	}

        	if(werte1.length>werte2.length) {
        		return 1;
        	}else if (werte1.length<werte2.length) {
        	   	return -1;
        	}else {
        		return 0;
        	}

        }
     };

Vielen Dank für Euer Bemühen,

Gruß magic_halli.
 
Schön, daß Du es hinbekommen hast. Nur ein kleiner Tip: Anscheinend nutzt Du Bubblesort, das jedoch asymptotisch gegen O(n²) läuft (d.h. es gibt n² Vergleiche). Ich weiß nicht wie groß Deine Datenmengen sind, aber bei größeren würde ich ein effizienteren Algorithmus vorschlagen (Quicksort).
 
Also ich weiß nicht, was man als große Datenmenge bezeichnet, aber die größte ArrayList hat bis jetzt ca.100 Einträge enthalten ;-)

Ich denke mal, das wird noch kein Brecher sein?!
 
Das ist ja kein Sortieralgorithmus im eigentlich Sinne.
Das ist ja nur ein Comparator, wodurch Java mitgeteilt wird wie er dieses Objekt zu unterscheiden hat, um es zu sortieren.

Man könnte statt einem Comperator auch eine Klasse machen die Compareable ist(lohnt sich nur bei eigenen Klassen), wodurch sie die Methoden compareTo(Object o) (und sollte auch equals(Object o)) enthalten.
Dadurch wird die "natürliche Sortierung" festgelegt.
 
Zurück