Zahlen in Strings einer ArrayList sortieren

noobadix

Bekanntes Mitglied
Holla,

wie kann ich in einer ArrayList, die Strings enthält, die Zahlenwerte sortieren?

Collections.sort(List,Comparator) hilft nur bedingt, denn die 10 folgt der 1 und das ist nicht gewünscht.

Wie also mache ich aus 1, 10, 12, 2, 3, 4, 40, 5 folgende Sortierung: 1,2,3,4,5,10,12,40 ?

Muss ich jetzt lernen wie man einen eigenen Comparator schreibt oder geht's einfacher?

Danke vorab, N.
 

noobadix

Bekanntes Mitglied
Ja, funktioniert. Hier mein Entwurf, hat jemand Optimierungsvorschläge?

Der Lektionsname einer Vokabel kann ein Name oder eine Nummer und doppelt, jedenfalls in Form eines String sein; die Methode soll eine Liste der verfügbaren Lektionen in einem Vokabular (Vokabel[] vcb) liefern.

Java:
...

public String[] getLections(){
    if(vcb!=null){
        ArrayList<String> tmp_vector = new ArrayList<String>();
        ArrayList<Integer> tmpVectorNumbers = new ArrayList<Integer>();
        for(int i=0;i<vcb.length;i++){
            String tmpLec = vcb[i].getLection(); //Name oder Nummer
            try{//Namen von Nummerangaben trennen
                Integer in = Integer.parseInt(tmpLec);
                if(!tmpVectorNumbers.contains(in))tmpVectorNumbers.add(in);
             }
             catch(Exception e) tmp_vector.add(tmpLec);
        }
        String[] tmp = new String[tmp_vector.size()];//für return
        int size = tmp_vector.size();
        if(tmpVectorNumbers.size()>0){
            Collections.sort(tmpVectorNumbers);
            if(tmp_vector.size()>0){
                Collections.sort(tmp_vector,String.CASE_INSENSITIVE_ORDER);
                size = tmpVectorNumbers.size() + tmp_vector.size();
                tmp = new String[size];
                for(int i=0;i<tmpVectorNumbers.size();i++){
                    tmp[i] = tmpVectorNumbers.get(i)+"";
                }
                for(int i=0;i<tmp_vector.size();i++){
                    tmp[i+tmpVectorNumbers.size()] = tmp_vector.get(i)+"";
                }
            }
            else{
                size = tmpVectorNumbers.size();
                tmp = new String[size];
                for(int i=0;i<tmpVectorNumbers.size();i++){
                    tmp[i] = tmpVectorNumbers.get(i)+"";
                }
            }
        }
        else{
            Collections.sort(tmp_vector,String.CASE_INSENSITIVE_ORDER);
            for(int i=0;i<size;i++){
                tmp[i] = tmp_vector.get(i).toString();
            }
        }
        return tmp;
    }
    return null;
}


...
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Warum gibt das [c]String[][/c] und nicht [c]List<String>[/c] zurück? Und warum so viel Code ;) ? Ein wenigzeiliger Comparator würde da wirklich helfen...
 

nrg

Top Contributor
Muss ich jetzt lernen wie man einen eigenen Comparator schreibt oder geht's einfacher?

wie faetz schon gesagt hat: Was ist bitte einfacher als das?

Java:
    public static void main(String[] args)  {
    	List<String> list = new ArrayList<String>();
    	list.add("1");
    	list.add("10");
    	list.add("12");
    	list.add("2");
    	list.add("3");
    	list.add("4");
    	list.add("40");
    	list.add("5");
    	Comparator<String> comp = new Comparator<String>() {
			@Override
			public int compare(String s1, String s2) {
				int i1 = Integer.parseInt(s1);
				int i2 = Integer.parseInt(s2);
				if (i1 < i2) return -1;
				else if (i1 > i2) return 1;
				else return 0;
			}	
    	};
		Collections.sort(list, comp);
		for (String s : list) 
			System.out.println(s + " ");
    }

edit: es sollte natürlich gewährleistet sein, dass nur Integer in der Liste enthalten sind, sonst wirft es eine NumberFormatException.
edit2: EDIT beachten!!! ist imho besser nur einmal zu parsen und das dann in eine lokale primitive int zu stecken.
 
Zuletzt bearbeitet:

nrg

Top Contributor
vllt noch zu:
"Muss ich jetzt lernen wie man einen eigenen Comparator schreibt".

gewöhn dir am besten die Einstellung ab: "ich kenn eine Lösung, die ich aber leider nicht kann, also schreib ich irgendeinen umständlichen Spagetticode"
sondern: Setz dich hin, frag google und lern wie es geht ;)
 

noobadix

Bekanntes Mitglied
vllt noch zu:
"Muss ich jetzt lernen wie man einen eigenen Comparator schreibt".

gewöhn dir am besten die Einstellung ab: "ich kenn eine Lösung, die ich aber leider nicht kann, also schreib ich irgendeinen umständlichen Spagetticode"
sondern: Setz dich hin, frag google und lern wie es geht ;)

Die Lösung hatte ich heute sogar schon in einem anderen Thread in den Händen, allerdings nicht so schön angepasst wie hier.

Immer lernen...gibt's nicht schon so software mit der man per sprache coded? Meine Handballen tun weh. Und wenn das mit der Sprache schon stünde, könnten die Befehle abstrakter formuliert werden: "Ey alter, mach mal für i gleich 10, solange 10 kleener als ne mille,..."
Ist das ne Marktlücke und/oder ein Forumprojekt wert?

@faetziminator
Warum gibt das String[] und nicht List<String> zurück? Und warum so viel Code ? Ein wenigzeiliger Comparator würde da wirklich helfen...

Das hängt irgendwie damit zusammen, wie ich die Methode verbaut hat, ist leider alles etwas krischelig, ich sag mal, individuell speziell, die ArrayList brauche ich nur kurz wegen der Sortierung.
 
Zuletzt bearbeitet:

nrg

Top Contributor
sowas wäre eine eierlegende Wollmilchsau. Also meiner Meinung nach nicht möglich bzw viel zu Fehleranfällig.

Sowas in der Richtung gibt es ja schon auch 1000x. Unter anderem Java. Javacode vereinfacht Bytecode. Hätten wir Java und andere Programmiersprachen nicht würden wir vllt Bytecode programmieren oder gar nurnoch Nullen und Einsen aneinerreihen ;).

Java bietet dafür eine strukturiere Möglichkeit Bytecode zu generieren. Du würdest dann mit Sprache Javacode generieren.

Was ich damit sagen will ist, dass alle Programmiersprachen/Hersteller eine Vereinfachung von der Programmierung anstreben. Visual Stuido (VB.NET, C#, J# etc) vereinfacht z.B. GUI Programmierung mit dem WYSIWYG-Editor: "ich ziehe diesen Butten da hin, doppeltklicke darauf und ich kann mein ButtonEvent_Klick schreiben". (edit: sogar nicht nur GUI. Ganz vergessen, dass man mit der Toolbox auch Objekte instanziieren kann, wie z.B. OleDbConnection, Timer - da wären wir gleich bei einem Nachteil -> schwer nachvollziehbar/wiederverwertbar/debugbar)

Wenn es so einfach wäre mit "Alter mach mal dies und jenes" zu programmieren, würden wir das bereits tun und der unangenehme Nebeneffekt wäre, dass viele hier keinen Job mehr hätten. Also ist das schon gut so wie es ist :).
 
Zuletzt bearbeitet:

noobadix

Bekanntes Mitglied
Dachte nur, weil ja mittlerweile ganze Callcentren und auch Handy-Funktionen sprachgesteuert werden. Hmm, dann vielleicht auf Nervenimpulse reagieren lassen? linken Zeigefinger 5 Sekunden heben: new String, naja, wird wohl zu offtopic, ich werd das aber nicht vergessen, weil ich hasse Tippen, ist auch so laut und man muss immer sitzen. Coden beim Dauerlaufen, das wär was.
 

nrg

Top Contributor
ich werd das aber nicht vergessen, weil ich hasse Tippen, ist auch so laut und man muss immer sitzen. Coden beim Dauerlaufen, das wär was.

dich zwing keiner es zu tun. Ich hab Spass daran. Arbeite doch dann lieber als Sportlehrer/Fitnesstrainer, wenn du am Dauerlaufen mehr Spass hast ;)

naja wie auch immer. OT.terminate();
 

eRaaaa

Top Contributor
Dann bist du hier falsch, nimm lieber das.

Oder man benutzt statt den Strings eben direkt Integer in der Liste. Dann hast du dein "Coden per Sprache" --> Collections.sort(liste); (/edit: ach LOL, er meint wirklich sprach gesteuert ...nun raff ichs..naja...NC :D )
nix mit Comparator/Comparable oder ähnliches, das nimmt dir nämlich alles dann die Integer-Klasse ab !

Hat es einen bestimmten Grund wieso die Zahlen als Strings vorliegen?!
 
Zuletzt bearbeitet:
G

Gelöschtes Mitglied 5909

Gast
Java:
        Comparator<String> comp = new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return Integer.parseInt(s1).compareTo(Integer.parseInt(s2));
            }   
        }

sollte es auch tun
 

nrg

Top Contributor
was heisst "würde sich eignen". Das muss da hin :).

Primitive Datentypen haben keine Methode compareTo. Sonst hätte ich nicht mit größer/kleiner Operatoren verglichen ;).

valueOf wäre vllt die kürzere Variante imho aber auch im Grunde nichts anderes als meine von oben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
D Zahlen innerhalb eines Strings auslesen Allgemeine Java-Themen 3
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
A Potenzmenge der Zahlen von 1 bis n Allgemeine Java-Themen 20
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
O Variablen Addition von Double-Werten ergibt seltsame 0.9999999 Zahlen Allgemeine Java-Themen 2
B Zufällig zwischen vorgegebenen Zahlen auswählen Allgemeine Java-Themen 6
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
M Zahlen in Array anordnen Allgemeine Java-Themen 8
D Erste Schritte Arrays vergleichen und die zahlen die nur einmal vorkommen ausgeben Allgemeine Java-Themen 5
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
T Tesseract OCR mit Zahlen Allgemeine Java-Themen 1
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
F Zahlen zu Bits Allgemeine Java-Themen 3
S Überprüfen, ob 5 Zahlen nebeneinander liegen Allgemeine Java-Themen 5
R Große Zahlen in Worten abkürzen Allgemeine Java-Themen 10
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
D Operatoren Logischer Rightshift von negativen Zahlen auf Bit-Ebene Allgemeine Java-Themen 7
L 2-Dimensionaler String: Zahlen verschieben Allgemeine Java-Themen 10
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
H Fibonacci-Zahlen Allgemeine Java-Themen 5
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
E mit extrem langen Zahlen (als Zeichneketten) arbeiten Allgemeine Java-Themen 4
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
L Filewriter schreibt Zahlen in Textdatei Allgemeine Java-Themen 2
T Methoden Zahlen austauschen Allgemeine Java-Themen 8
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
M ungerade zahlen auf 4 zahlen aufteilen Allgemeine Java-Themen 2
F Funktionsplotter komplexe Zahlen: geeignetes 3D-Koordinatensystem Allgemeine Java-Themen 16
B Zahlen ausgeben hilfe! Allgemeine Java-Themen 8
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Modulo-Operator versagt bei zu großen Zahlen? Allgemeine Java-Themen 14
AssELAss String mit Zahlen mit Tausendertrennzeichen versehen Allgemeine Java-Themen 14
D Code bitte mit 19 stelligen Zahlen kompatibel machen Allgemeine Java-Themen 5
U (Java) Happy Numbers in Anlehnung an den Sieb des Eratosthenes (Glueckliche Zahlen) Allgemeine Java-Themen 1
J Array ohne vorher festgelegte Länge oder Wie wandle ich Zahlen in Zahlen mit anderen Basen um? Allgemeine Java-Themen 6
Cayton Bruchrechner stürzt bei eingabe negativer Zahlen ab Allgemeine Java-Themen 4
N Zahl mit bestimmter Länge und nur bestimmten Zahlen generieren lassen Allgemeine Java-Themen 7
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
I Java-Programm: Zahlen in Worte Allgemeine Java-Themen 22
H String auf Zahlen prüfen Allgemeine Java-Themen 4
V iText Textfelder mit Zahlen! Allgemeine Java-Themen 2
M Rechnen mit kleinen Zahlen langsamer!? Allgemeine Java-Themen 11
R Modulo mit negativen Zahlen Allgemeine Java-Themen 8
Luk10 Römische Zahlen in Java Allgemeine Java-Themen 7
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
GianaSisters ArrayList mit Zahlen Allgemeine Java-Themen 10
B User-Input aus Zahlen und Operatoren - beste Umsetzung? Allgemeine Java-Themen 8
S Fixe Zahlen vergleichen Allgemeine Java-Themen 4
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
T Apache POI Export EXCEL - [Zahlen-Werte] Allgemeine Java-Themen 1
ModellbahnerTT Button mit Zahlen beschriften Allgemeine Java-Themen 1
J Zahlenkombination aus int-array, mit absteigenden Zahlen Allgemeine Java-Themen 6
P große double Zahlen und modulo Allgemeine Java-Themen 8
R Runden von Zahlen Allgemeine Java-Themen 3
J Zahlen Rechtsbuendig in File schreiben Allgemeine Java-Themen 3
W POI - Formatierung für Zahlen Allgemeine Java-Themen 4
MQue Zahlen mit Border Allgemeine Java-Themen 2
T ungerade zahlen berechnen Allgemeine Java-Themen 3
N Zahlen mit Nachkommastellen aus Textfeldern einlesen Allgemeine Java-Themen 6
P Algoritmus für 3er-Paare von n Zahlen Allgemeine Java-Themen 12
A Fibonacci-Zahlen & kopfgesteuerte Schleifen & Strukt Allgemeine Java-Themen 8
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G die mittlere von 5 Zahlen nur mit if und else finden Allgemeine Java-Themen 48
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
MQue Zahlen an alysieren Allgemeine Java-Themen 6
ARadauer Random keine Zahlen doppelt Allgemeine Java-Themen 4
V FileWriter und Zahlen (Kein Problem, nur Verständnisfrage) Allgemeine Java-Themen 4
F 3 Zahlen "vereinfachen" Allgemeine Java-Themen 5
C double Zahlen mit drei NachkommaStellen in String umwandeln Allgemeine Java-Themen 2
A testen ob Primzahl dauert bei größeren zahlen extrem lange Allgemeine Java-Themen 8
E Hex- Zahlen in Datei Allgemeine Java-Themen 4
G Umrechnen von grossen Zahlen ins Hex-System Allgemeine Java-Themen 3
S Zahlen sortieren Allgemeine Java-Themen 3
P rechnen mit extrem grossen zahlen Allgemeine Java-Themen 2
X Logische Operatoren auf binären Zahlen Allgemeine Java-Themen 2
F Array mit Zahlen drin sortieren Allgemeine Java-Themen 2
M Hilfe: Lotto: die 6 häufigsten generierten zahlen ausgeben Allgemeine Java-Themen 13
O String auf zahlen prüfen (java 1.3) Allgemeine Java-Themen 4
G Methode, die Buchstaben in Zahlen umwandelt? Allgemeine Java-Themen 13
S Integer-Zahlen in Excel-Sheet schreiben Allgemeine Java-Themen 10
M Lange Zahlen in Java Allgemeine Java-Themen 4
C zahlen einlesen Allgemeine Java-Themen 2
thE_29 Wie hex Zahlen darstellen Allgemeine Java-Themen 3
G Zahlen vergleichen Allgemeine Java-Themen 5
S Rechnen mit float Zahlen Allgemeine Java-Themen 2
H Kann keine Zahlen von Buchstaben unterscheiden Allgemeine Java-Themen 4
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
N MySQL mit Strings Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben